16.37.2. Примеры поиска
Возможно два базовых варианта организации цикла поиска файлов. Рассмотрим оба (они равнозначны по скорости работы)
Вариант 1. Цикл repeat ... until
var
FS : TFileSearch;
begin
FS := TFileSearch.Create(nil);
if FS.FindFirst('c:\*.*') then
repeat
if FS.IsDir then
AddToLog('Найден каталог: '+FS.FileName)
else
AddToLog('Найден файл: '+FS.FileName)
until not(FS.FindNext);
FS.Free;
end.
Вариант 2. Цикл while
var
FS : TFileSearch;
begin
FS := TFileSearch.Create(nil);
FS.FindFirst('c:\*.*');
while FS.Found do begin
if FS.IsDir then
AddToLog('Найден каталог: '+FS.FileName)
else
AddToLog('Найден файл: '+FS.FileName);
FS.FindNext;
end;
FS.Free;
end.
Пример рекурсивного обхода каталогов
// Обработка найденного файла
Procedure ScanFile(AFileName : string);
begin
SetStatusBarText(AFileName);
end;
// Сканирование каталога
Procedure ScanDir(ADirName : string; AScanSubDir : boolean);
var
FS : TFileSearch;
begin
ADirName := NormalDir(ADirName);
FS := TFileSearch.Create(nil);
FS.FindFirst(ADirName + '*.*');
while FS.Found do begin
if FS.IsDir and AScanSubDir and (FS.FileName <> '.')
and (FS.FileName <> '..') then
ScanDir(ADirName + FS.FileName, AScanSubDir)
else
ScanFile(ADirName + FS.FileName);
FS.FindNext;
end;
FS.Free;
end;
begin
ScanDir('c:\', true);
end.