function FINDFile(const FILESpec: TFileName; attributes: integer): TStringList;
var
spec: string;
list: TStringList;
procedure RFINDFile(const folder: TFileName);
var
SearchRec: TSearchRec;
begin
// Locate all matching FILES in the current
// folder and add their names to the list
if FINDFirst(folder + spec, attributes, SearchRec) = 0 then begin
try
repeat
if (SearchRec.Attr and faDIRECTORY = 0) or
(SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
list.Add(folder + SearchRec.Name);
until FINDNext(SearchRec) <> 0;
except
FINDClose(SearchRec);
raise;
end;
FINDClose(SearchRec);
end;
// Now search the subfolders
if FINDFirst(folder + '*', attributes
or faDIRECTORY, SearchRec) = 0 then
begin
try
repeat
if ((SearchRec.Attr and faDIRECTORY) <> 0) and
(SearchRec.Name <> '.') and (SearchRec.Name <> '..') then
RFINDFile(folder + SearchRec.Name + '\');
until FINDNext(SearchRec) <> 0;
except
FINDClose(SearchRec);
raise;
end;
FINDClose(SearchRec);
end;
end; // procedure RFINDFile inside of FINDFile
begin // function FINDFile
list := TStringList.Create;
try
spec := ExtractFileName(FILESpec);
RFINDFile(ExtractFilePath(FILESpec) 1;;
Result := list;
except
list.Free;
raise;
end;
end;
نحوه استفاده:
var
List: TStringList;
begin
List := FINDFile('c:\windows\ + 'file1.txt', 0);
این تابع فولدر c:\windows و تمام زیرشاخههای آن را بدنبال فایل موردنظر میگردد و موارد یافت شده را در عناصر List قرار میدهد.