Помощь - Поиск - Пользователи - Календарь
Полная версия: Как рекурсивно вывести список всех файлов и катало
Форум «Всё о Паскале» > Delphi, Assembler и другие языки. > Delphi
-Guest_
Подскажите как через FindFirst и FindNext можно рекурсивно вывести список всех файлов директорий и поддиректорий?
Может есть какой-либо примерчик?smile.gif
Пользовался уже поиском но толку он не дал, мне нужен маленький пример на Дельфи, а все здешние примеры используют модуль Dos, которого нет в Дельфи...
Может подскажите чего??
volvo
Вместо Dos пользуйся SysUtils... Вот пример:
Procedure ScanDisk(StartDir: String; Mask:string; List:TStrings);
Var SearchRec: TSearchRec;
Begin
If Mask ='' Then Mask:= '*.*';
If StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
If FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then Begin
Repeat

Application.ProcessMessages;

If (SearchRec.Attr and faDirectory) <> faDirectory then
List.Add(StartDir + SearchRec.Name)
Else
If (SearchRec.Name <> '..') and (SearchRec.Name <> '.') Then Begin

List.Add(StartDir + SearchRec.Name + '\');
ScanDisk(StartDir + SearchRec.Name + '\',Mask,List); { и рекурсия }

End;
Until FindNext(SearchRec) <> 0;
FindClose(SearchRec);
End;
end;

Неужели это так сильно отличается от примера, приведенного здесь: FAQ: Файлы (Поиск файла по директориям)
Guest
volvo, спасибо огромное!!! всё работает как часы!!
Guest
кстати, по-моему у этого кода есть некоторый баг, если файлы разбросаны так:

Код

c:\test\
c:\test\test.txt
c:\test\test2\
c:\test\test2\test.htm


и выполнить поиск по маске: *.htm, код прервется на первой директории т.к. такого файла там нет (и проигнорирует тот факт, что он возможно есть на дальнейших уровнях)
volvo
Правильно. Это так и было задумано тем человеком, который писал код. :yes: Это полностью соответствует МОИМ требованиям к программе... Есть другие требования - пиши свой код... Если я не ошибаюсь, была просьба
Цитата
Подскажите как через FindFirst и FindNext можно рекурсивно вывести список всех файлов директорий и поддиректорий?
И к тому же
Цитата
Может есть какой-либо примерчик?
Понимаешь? Примерчик, а не код "под ключ" !!!
Guest
Но если так и было задумано программистом, то зачем ему надо было вводить параметр Mask, который не работает? smile.gif (если его значение отлично от *.*)
volvo
Специально для того, чтобы ты подумал, как этого избежать :D А о том, что директория тоже может иметь расширение, ты не подумал?
Я вот об этом:
Цитата
c:\test\
c:\test\test.txt
c:\test\test2.htm\
c:\test\test2.htm\test.htm
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.