Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Рекурсивный подсчет файлов в папке


Автор: Тутанхамец 23.3.2006, 18:46
Господа!

Вот есть такой код:

Код

procedure TAC.CountFiles(sDir :string);
var
    F:TSearchRec;
    g:integer;
begin
    g:=FindFirst(sdir+'\*',faanyfile,f);
    while g=0 do begin
    if (f.Attr and fadirectory)=fadirectory then countfiles(sdir+'\'+f.name) else  inc(filescount);
    g:=FindNext(f);
    end;
    FindClose(f);
    if assigned(FCountEvent) then countevent(self,filescount);
end;



...который ищет и ищет файлы, причем столько, сколько их в той папке отродясь не бывало. В чем моя ошибка? И что это за '.', которую находит FindNext? Заранее спасибо.

Автор: smartov 23.3.2006, 18:49
Цитата(Тутанхамец @ 23.3.2006, 17:46 Найти цитируемый пост)
И что это за '.'

'.' - ссылка на текущую папку
'..' - ссылка на родительскую папку
Само собой оно в бесконечную рекурсию падает.
Отсеивай их.
Добавлено @ 18:50
P.S. И лучше юзай юникодные функции (FindFirstW....) потому, что иначе могут быть проблемы с файлами, у которых в именах встречаются разные нездоровые символы (Например ярлык на флопак - в нем есть символ дроби)

Автор: Тутанхамец 23.3.2006, 18:55
Ага! Теперь ясно.
Спасибо smile

А FindFirstW- где ее взять? Что-то в справке Делфи5 ее не видно. Или ты имеешь в виду APIшную FindFirstFile?
Добавлено @ 18:59
А есть более быстроработающие способы получения информации о файлах в директории?

Автор: _hunter 23.3.2006, 19:05
нету...

Автор: bems 23.3.2006, 19:08
Цитата(Тутанхамец @ 23.3.2006, 18:55 Найти цитируемый пост)
Или ты имеешь в виду APIшную FindFirstFile?

Ее он и имеет ввиду. Только юникод версия.

Автор: Тутанхамец 23.3.2006, 19:10
А сама Винда гораздо быстрее считает, когда вызываешь окно свойств папки.

Как так? Она выгрызает из директории записи о файлах? Ну дык наверняка FindFirst и пр. делает тоже самое.
Добавлено @ 19:17
Ладно, это уже не критично...

Всем спасибо, вопрос решен. smile

Автор: _hunter 23.3.2006, 19:19
не сказал бы я что быстрее...
+ она, явно, свою службу индексирования узвет...

Автор: Тутанхамец 23.3.2006, 20:27
Скорее службу. Для папки весом в 4 гига разница в скорости в общем-то впечатляет.

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