Следующий код собирает все найденные файлы в TStringList
:
procedure FindFile(RootPath: string; FileName: string; FileLocations: TStringList);
var
FindRec: TFindRec;
FilePath: string;
begin
Log(Format('Looking for %s in %s', [FileName, RootPath]));
if FindFirst(RootPath + '\*', FindRec) then
begin
try
repeat
if (FindRec.Name <> '.') and (FindRec.Name <> '..') then
begin
FilePath := RootPath + '\' + FindRec.Name;
if FindRec.Attributes and FILE_ATTRIBUTE_DIRECTORY <> 0 then
begin
FindFile(FilePath, FileName, FileLocations);
end
else
if CompareText(FindRec.Name, FileName) = 0 then
begin
Log(Format('Found %s', [FilePath]));
{ Here you can do additional check (for file contents) }
FileLocations.Add(FilePath);
Break;
end;
end;
until not FindNext(FindRec);
finally
FindClose(FindRec);
end;
end
else
begin
Log(Format('Failed to list %s', [RootPath]));
end;
end;
Вы можете использовать его следующим образом:
var
FileLocations: TStringList;
begin
FileLocations := TStringList.Create();
FindFile('C:\some\path', '240.json', FileLocations);
end;
И затем обрабатывать FileLocations
по мере необходимости:
for I := 0 to FileLocations.Count - 1 do
begin
FileName := FileLocations[I];
{ Process FileName }
end;
Хотя, если вам не нужно обрабатывать файлы несколько раз, вы также можете обрабатывать их непосредственно в FindFile
, и вам не нужно собирать имена в список.