-
Добрый вечер,
Есть ли API (или другие средства), позволяющие получить следующую информацию о папке на локальном, а также на удаленном компьютере:
- количество файлов в папке
- общий размер всех файлов в папке
Главное - без использования FindFirst..FindNext.
Спасибо.
-
Даже сама винда при отображении папок с большим числов файлов создаёт список медленно и постепенно. Следовательно, всё равно используются FindFirstFile и FindNextFile
-
А почему эти функции нельзя использовать?
-
Ну если для локального HDD еще можно что-либо придумать (но не факт, что будет быстрее), то для сетевых дисков вряд ли.
-
> K-1000 © (21.05.16 06:19) [2]
Да вот у меня как раз такой случай, как Дмитрий описал:
в папках может лежать огромное количество файлов небольшого и большого размеров, и подсчет размера папки и количества файлов происходит не совсем быстро.
Да и подумалось, может за последний десяток лет появилось более оптимальное/радикальное средство сбора информации о папках?...
-
Ну тут есть естественный вопрос к ТС. А что есть "папка" в твоём понимании?
-
Профессионалы с Sources.ru вручную набирают NFTS. Говорят получается быстрее.
> Даже сама винда при отображении папок с большим числов файлов
> создаёт список медленно и постепенно.
Она не по этому тормозит. Там самое медленное это получение иконки к файлу, папке.
-
> Pavia © (22.05.16 09:08) [6]
> Она не по этому тормозит. Там самое медленное это получение
> иконки к файлу, папке.
Иконки получаются в отдельном потоке, это не мешает заходу и выходу в/из папки. Кроме того они кэшируются в системном имиджлисте и для известных типов заново не считываюся с диска. Кроме того, ListView в проводнике работает в виртуальном режиме и не видимые в данный момент файлы вообще не нуждаются в отрисовке иконок (хотя в фоне они извлекаются). Это не главная причина "тормозов".
Зайди в Linux в папку c миллионами файлов через консольный файловый менеджер, типа MC - тоже придется подождать.
-
> Она не по этому тормозит. Там самое медленное это получение
> иконки к файлу, папке.
При определении размеров папки иконки не нужны. Но система тормозит.
-
> При определении размеров папки иконки не нужны. Но система
> тормозит.
Не тормозит, а работает.
> Зайди в Linux в папку c миллионами файлов через консольный
> файловый менеджер, типа MC - тоже придется подождать.
Возьмите DOS там ждать не надо.
По поводу миллиона. Як дети теория алгоритмов для кого придумана была? Конечно если взять параметр N большим, то и задача будет решаться долго. Но это не значит что она тормозит! Так как к любой задаче можно найти N который читается за секунды, минуты. Поэтому алгоритмы и сравнивают по O() или по удельному значению.
-
> Конечно если взять параметр N большим, то и задача будет
> решаться долго. Но это не значит что она тормозит!
А скорость выполнение единичной итерации конечно никак на скорость работы не влияет. Влияет только N.
-
> она тормозит!
Таки тормозит. Или вообще не работает, а показывает прогрессбар.
-
> Pavia © (22.05.16 12:19) [9]
> Возьмите DOS там ждать не надо.
Везде надо. Волшебства не бывает. Во времена DOS миллионы файлов в папках не хранили.
-
Варианта всего два:
1. использовать NtQueryDirectoryFile - ну небольшое ускорение будет - но не сильно заметное.
2. ручками парсить структуру диска, учитывая что там может быть как NTFS, так и FAT16/FAT32.
Это будет пошустрее, но опять-же не супер шустро.
-
> Варианта всего два:
- начиная с Vista есть честная обертка к NtQueryDirectoryFile - GetFileInformationByHandleEx...
-
Понятно.
Спасибо всем.
-
> начиная с Vista есть честная обертка к NtQueryDirectoryFile
> - GetFileInformationByHandleEx...
Только её до сих пор не потрудились прописать в Delphi... По меньшей мере, в XE9 её ещё не было.