IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Как рекурсивно вывести список всех файлов и катало, помогите примером.....??
-Guest_
сообщение 28.06.2005 15:32
Сообщение #1


Гость






Подскажите как через FindFirst и FindNext можно рекурсивно вывести список всех файлов директорий и поддиректорий?
Может есть какой-либо примерчик?smile.gif
Пользовался уже поиском но толку он не дал, мне нужен маленький пример на Дельфи, а все здешние примеры используют модуль Dos, которого нет в Дельфи...
Может подскажите чего??
 К началу страницы 
+ Ответить 
volvo
сообщение 28.06.2005 16:13
Сообщение #2


Гость






Вместо 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
сообщение 28.06.2005 23:51
Сообщение #3


Гость






volvo, спасибо огромное!!! всё работает как часы!!
 К началу страницы 
+ Ответить 
Guest
сообщение 29.06.2005 1:58
Сообщение #4


Гость






кстати, по-моему у этого кода есть некоторый баг, если файлы разбросаны так:

Код

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


и выполнить поиск по маске: *.htm, код прервется на первой директории т.к. такого файла там нет (и проигнорирует тот факт, что он возможно есть на дальнейших уровнях)
 К началу страницы 
+ Ответить 
volvo
сообщение 29.06.2005 7:32
Сообщение #5


Гость






Правильно. Это так и было задумано тем человеком, который писал код. :yes: Это полностью соответствует МОИМ требованиям к программе... Есть другие требования - пиши свой код... Если я не ошибаюсь, была просьба
Цитата
Подскажите как через FindFirst и FindNext можно рекурсивно вывести список всех файлов директорий и поддиректорий?
И к тому же
Цитата
Может есть какой-либо примерчик?
Понимаешь? Примерчик, а не код "под ключ" !!!
 К началу страницы 
+ Ответить 
Guest
сообщение 29.06.2005 8:03
Сообщение #6


Гость






Но если так и было задумано программистом, то зачем ему надо было вводить параметр Mask, который не работает? smile.gif (если его значение отлично от *.*)
 К началу страницы 
+ Ответить 
volvo
сообщение 29.06.2005 8:41
Сообщение #7


Гость






Специально для того, чтобы ты подумал, как этого избежать :D А о том, что директория тоже может иметь расширение, ты не подумал?
Я вот об этом:
Цитата
c:\test\
c:\test\test.txt
c:\test\test2.htm\
c:\test\test2.htm\test.htm
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 6:20
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"