Форум: "WinAPI";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
ВнизКак БЫСТРО подсчитать кол-во файлов в заданном каталоге? Найти похожие ветки
← →
Unknown user © (2007-02-26 15:54) [0]Файлов может быть >1000
← →
Сергей М. © (2007-02-26 16:00) [1]Встречный вопрос - МЕДЛЕННО это как ?
← →
Unknown user © (2007-02-26 16:06) [2]Утояняющий вопрос: какой самый быстрый способ?
← →
Сергей М. © (2007-02-26 16:10) [3]
> какой самый быстрый способ?
Тот который не самый "медленный".
А уж что ты записал в "медленные способы"
- то нам неведомо.
← →
clickmaker © (2007-02-26 16:14) [4]
> [2] Unknown user © (26.02.07 16:06)
а ты какой использовал?
← →
Unknown user © (2007-02-26 16:14) [5]на данный момент использую FindFirst, FindNext по маске *.*
← →
Unknown user © (2007-02-26 16:16) [6]интересно в самих фаловых таблицах хранится значение -кол-во файлов в каталоге? хотя насколько мне помнится, например, для FAT32 нет разницы между файлом и каталогом, только иной аттрибут.
← →
Сергей М. © (2007-02-26 16:26) [7]
> Unknown user © (26.02.07 16:14) [5]
>
> на данный момент использую FindFirst, FindNext по маске
> *.*
ну и используй себе)... Чем же оно "медленно"-то ?
> интересно в самих фаловых таблицах хранится значение -кол-
> во файлов в каталоге?
Нет, не хранится.
← →
Сергей М. © (2007-02-26 16:28) [8]
> например, для FAT32
А ты разве упомянул в вопросе конкретную файловую систему ?
← →
Reindeer Moss Eater © (2007-02-26 16:44) [9]Под самым быстрым способом неизвестные юзеры как правило подразумевают способ "с наименьшим количеством буков исходника".
ЗЫ самый быстрый способ : посылка какому-нибудь листбоксу LB_DIR и последующее чтение Items.Count
← →
Unknown user © (2007-02-26 17:06) [10]Reindeer Moss Eater под самым быстрым способом неизвестные юзеры подразумевают алгоритм выполняющий данную задачу за наименьшее время среди всех известных алгоритмов.
поясняю подробнее: есть программа, в FileListBox в которой загружается список фалов, последний активный каталог запоминается в INI, чтобы при старте программы снова его выбрать. так вот, если в этом каталоге огромное кол-во файлов программа надолго подвисает при старте (время на заполнение FileListBox). поэтому при старте программы приходится проверять сколько файлов в каталоге который требуется выбрать и если это число больше определенного кол-ва, в данный каталог не переходить. тот способ что я использую сейчас (FindFirst, FindNext) подсчет 1750 файлов выполняет около 2-5 сек. (правда каталог сетевой)
← →
Unknown user © (2007-02-26 17:13) [11]Сергей М.
я и в ответе конкретно не упоминал :) я сказал, например, FAT32 потому что как организовано в NTFS не знаю, хотя судя по тому что эта FS имеет структуру подобную к базе данных, то такая инфа, как кол-во файлов в каталоге, в ней может и храниться.
← →
DVM © (2007-02-26 17:18) [12]function GetDirFilesCount(const Dir: string; const Mask: string): integer;
var
FD : TWin32FindData;
FH : THandle;
begin
Result := 0;
if (Dir = "") or (not DirExists(Dir)) then exit;
FH := FindFirstFile(PChar(Dir + Mask), FD);
repeat
if (FH<>INVALID_HANDLE_VALUE) and (FD.cFileName <> string(".")) and
(FD.cFileName<>string("..")) and ((FILE_ATTRIBUTE_HIDDEN and FD.dwFileAttributes) = 0) then
if (FILE_ATTRIBUTE_DIRECTORY and FD.dwFileAttributes) = 0 then inc(Result);
until FindNextFile(FH,FD) = false;
if FH <> 0 then Windows.FindClose(FH);
end;
← →
DVM © (2007-02-26 17:20) [13]
> Unknown user © (26.02.07 17:06) [10]
Чтоб не подвисало - отдельный поток + окно с прогрессом.
← →
clickmaker © (2007-02-26 17:25) [14]
> [10] Unknown user © (26.02.07 17:06)
а почему бы не отказаться от FileListBox в пользу просто ListBox + FindFirst + отдельный поток? Или сразу читать, допустим, первые 300 файлов, показывать список, а потом уже в потоке (или с Application.ProcessMessages) тихонько дочитывать, пока юзер таращит глаза на такое изобилие
← →
Reindeer Moss Eater © (2007-02-26 17:26) [15]подсчет 1750 файлов выполняет около 2-5 сек.
А зачем считать до конца?
Если подсчет уже длится дольше икс миллисекунд, то не проще ли просто сделать break из цикла?
← →
Unknown user © (2007-02-26 17:27) [16]DVM
спасибо.
судя по высказываниям более быстрого метода не имеется? ок. всем спасибо. буду передавать в в функцию значение при котром прекратить подсчет, мне то ведь надо только проверить или не больше число файлов в каталоге некоторого числа N, until (FindNextFile(FH,FD) = false) or StopCount. и действительно надо организовывать потоки для операций занимающих много машинного времени
← →
Anatoly Podgoretsky © (2007-02-26 20:31) [17]> Unknown user (26.02.2007 17:06:10) [10]
> последний активный каталог запоминается в INI,
Вот оно ключевое слово!
В данный момент уже известно количество файлов в данном каталоге и кто же мешает его записать в тот же ИНИ?
← →
Alex Konshin © (2007-02-28 08:51) [18]А почему решили, что время тратится на подсчет файлов?
Я уверен, что оно тратится на заполнение этого самого листбокса. Нужно просто блокировать отрисовку этого листбокса во время заполнения.
← →
DiamondShark © (2007-02-28 12:49) [19]А у меня вообще сомнения в полезности листбокса с тысячью записей.
← →
просто так (2007-02-28 15:57) [20]>>Чтоб не подвисало - отдельный поток + окно с прогрессом.
интересно, как сделать прогресс если колво файлов неизвестно?
← →
homm © (2007-02-28 16:02) [21]> судя по высказываниям более быстрого метода не имеется?
> ок.
Что-т мне так не кажется. виндовс не идиоты писали. ИМХО, гднить должно хранится.
← →
Unknown user © (2007-03-03 12:50) [22]
> В данный момент уже известно количество файлов в данном
> каталоге и кто же мешает его записать в тот же ИНИ?
да, действительно можно так поступать. но это не полноценное решение .
> > судя по высказываниям более быстрого метода не имеется?
>
> > ок.
>
> Что-т мне так не кажется. виндовс не идиоты писали. ИМХО,
> гднить должно хранится.
какие еще будут мнения на этот счет? :) хотя судя по тому, что стандартное окно свойства файлов и папок при запуске всегда подсчитывает кол-во файлов и занимаемммое место, наверное таки идиоты :)
мне интересно, если NTFS есть некое подобие базы данных, то может там хранится кол-во записей-файлов в каждом каталоге дополнительно к различным аттрибутам безопасности и пр.
← →
homm © (2007-03-03 13:18) [23]> какие еще будут мнения на этот счет? :) хотя судя по тому,
> что стандартное окно свойства файлов и папок при запуске
> всегда подсчитывает кол-во файлов и занимаемммое место,
> наверное таки идиоты :)
Это видимое. На самом деле большую часть времени читаются всякие дискрипторы безопасности, аттрибуты, прочее.
← →
DVM © (2007-03-03 19:02) [24]
> просто так (28.02.07 15:57) [20]
> >>Чтоб не подвисало - отдельный поток + окно с прогрессом.
>
> интересно, как сделать прогресс если колво файлов неизвестно?
>
Вспомни как MS такое делает. Даже специальный прогресс придумали :)
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.08.19;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.045 c