Поиск файла во всех директориях рекурсивно - Turbo Pascal

Узнай цену своей работы

Формулировка задачи:

программа выполняет поиск по сигнатуре. НО! делает это в одной папке. а как сделать так, чтобы поиск был и во вложенных в эту папку папках?

Решение задачи: «Поиск файла во всех директориях рекурсивно»

textual
Листинг программы
Uses DOS;
 
Procedure FileFind(Dir,FindName : PathStr);
{Поиск файлов по маске по всему диску}
 
 Procedure SearchDir(Dir : PathStr);
 Var
   SRec       : SearchRec;
 begin
   {Поиск файлов по маске}
   if Dir[Length(Dir)] <> '\' then Dir := Dir+'\';
   FindFirst(Dir + FindName, AnyFile, SRec);
   While DosError = 0 do
     begin
       With SRec do
        if Attr and (VolumeID + Directory) = 0 then
         WriteLn(Dir + Name);
       FindNext(SRec);
     end;
   {Поиск всех вложенных каталогов, в т.ч. скрытых, системных, r/o}
   FindFirst(Dir+'*.*', Directory or ReadOnly or Hidden or SysFile, SRec);
   While DosError = 0 do
     begin
       With SRec do
        if (Attr and Directory <> 0) and (Name[1] <> '.') then
         SearchDir(Dir+Name);
       FindNext(SRec);
     end;
 end;
 
begin
 SearchDir(Dir);
end;
{------------------------------------------}
{Пример поиска всех .TXT файлов на диске С:}
begin
  FileFind('c:\','*.txt');
end.

Объяснение кода листинга программы

  1. Подключается библиотека DOS.
  2. Определяется процедура FileFind, которая выполняет поиск файлов по маске по всему диску.
  3. Определяется процедура SearchDir, которая рекурсивно ищет все файлы по заданной маске в текущей директории и всех ее поддиректориях.
  4. В процедуре SearchDir инициализируется переменная SRec, которая будет использоваться для хранения информации о найденных файлах.
  5. Если последний символ директории не является обратным слэшем (\), то к нему добавляется обратный слэш (\).
  6. Вызывается функция FindFirst с аргументами Dir + FindName, AnyFile и SRec. Эта функция ищет первый файл, соответствующий заданной маске, в указанной директории.
  7. Пока ошибка DOS равна нулю, выполняется цикл. Внутри цикла выводится имя найденного файла.
  8. После каждого вывода имени файла вызывается функция FindNext с переменной SRec.
  9. Если атрибут файла VolumeID + Directory равен нулю, то его имя выводится на экран.
  10. Вызывается функция FindFirst с аргументами Dir + '*.*', Directory or ReadOnly or Hidden or SysFile и SRec. Эта функция ищет все файлы, соответствующие заданной маске, в указанной директории.
  11. Пока ошибка DOS равна нулю, выполняется цикл. Внутри цикла вызывается процедура SearchDir с аргументом Dir + Name. Эта процедура ищет все файлы с именем, совпадающим с указанным, в указанной директории.
  12. Если атрибут файла Directory не равен нулю и его имя не начинается с точки (.'), то вызывается процедура SearchDir с аргументом Dir + Name.
  13. Выполняются действия, описанные в пунктах 6-11.
  14. Конец процедуры SearchDir.
  15. Конец программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4 из 5
Похожие ответы