AVZ 5. Руководство пользователя
×

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.
 
В примерах использовались: AddToLog, NormalDir, SetStatusBarText