Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > FindFirst c faDirectory


Автор: samsamich 4.3.2010, 10:30
Доброго времени суток. Вызываю FindFirst с такими параметрами:
Код

FindFirst('c:\*.*',faDirectory,sr)

FindNext выдает и файлы и папки.. Если FindFirst вызывать не для корня диска то все нормально.. Кто-нибудь сталкивался?
D7, WinXP..

Автор: Bitter 5.3.2010, 10:19
пиши после FindFirst проверку: if sr.Attr=faDirectory then

Автор: Matematik 5.3.2010, 12:01
Цитата(samsamich @  4.3.2010,  10:30 Найти цитируемый пост)
Если FindFirst вызывать не для корня диска то все нормально

Не для корня будет тоже самое.
Реализация FindFirst не очень логичная, у многих людей возникали такие же проблемы.
В справке, кстати, про это написано
http://translate.google.ru/#en|ru|The%20Attr%20parameter%20specifies%20the%20special%20files%20to%20include%20in%20addition%20to%20all%20normal%20files.%20Choose%20from%20these%20file%20attribute%20constants%20when%20specifying%20the%20Attr%20parameter%3A%20%0A%0A

Цитата(Bitter @  5.3.2010,  10:19 Найти цитируемый пост)
if sr.Attr=faDirectory then 

Неправильно.
Надо
Код

FindFirst('c:\*.*',faAnyFile,sr) // иначе в результат не попадут скрытые и системные директории
//---
// проверять надо установленый флаг faDirectory,
// при =faDirectory, if не пройдет для скрытых/системныех директорий
if (ssr.Attr and faDirectory)<>0) and (ssr.Name<>'..') and (ssr.Name<>'.') then

Автор: samsamich 5.3.2010, 13:35
Спасибо, про нелогичнось FindFirst уже догадался.. А в некорневой папке у меня просто файлов не было smile

Автор: Proxin 6.3.2010, 01:14
Код

var sr:tsearchrec;
begin
if findfirst('C:\*.*' ,0,sr)=0 then
repeat
if (sr.attr=faanyfie and fadirectory) and (sr.name<>'.') and (sr.name<>'..') then //do what u want
until findnext(sr)<>0;
end;


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)