Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.07.16;
Скачать: CL | DM;

Вниз

Получение данных о папке без FindFirst..FindNext   Найти похожие ветки 

 
Empleado ©   (2016-05-20 18:27) [0]

Добрый вечер,

Есть ли API (или другие средства), позволяющие получить следующую информацию о папке на локальном, а также на удаленном компьютере:
- количество файлов в папке
- общий размер всех файлов в папке

Главное - без использования FindFirst..FindNext.

Спасибо.


 
Dimka Maslov ©   (2016-05-20 20:33) [1]

Даже сама винда при отображении папок с большим числов файлов создаёт список медленно и постепенно. Следовательно, всё равно используются FindFirstFile и FindNextFile


 
K-1000 ©   (2016-05-21 06:19) [2]

А почему эти функции нельзя использовать?


 
DVM ©   (2016-05-21 12:37) [3]

Ну если для локального HDD еще можно что-либо придумать (но не факт, что будет быстрее), то для сетевых дисков вряд ли.


 
Empleado ©   (2016-05-21 23:27) [4]


> K-1000 ©   (21.05.16 06:19) [2]

Да вот у меня как раз такой случай, как Дмитрий описал:
в папках может лежать огромное количество файлов небольшого и большого размеров, и подсчет размера папки и количества файлов происходит не совсем быстро.

Да и подумалось, может за последний десяток лет появилось более оптимальное/радикальное средство сбора информации о папках?...


 
Германн ©   (2016-05-22 01:18) [5]

Ну тут есть естественный вопрос к ТС. А что есть "папка" в твоём понимании?


 
Pavia ©   (2016-05-22 09:08) [6]

Профессионалы с Sources.ru вручную набирают NFTS. Говорят получается быстрее.


> Даже сама винда при отображении папок с большим числов файлов
> создаёт список медленно и постепенно.

Она не по этому тормозит. Там самое медленное это получение иконки к файлу, папке.


 
DVM ©   (2016-05-22 10:14) [7]


> Pavia ©   (22.05.16 09:08) [6]


> Она не по этому тормозит. Там самое медленное это получение
> иконки к файлу, папке.

Иконки получаются в отдельном потоке, это не мешает заходу и выходу в/из папки. Кроме того они кэшируются в системном имиджлисте и для известных типов заново не считываюся с диска. Кроме того, ListView в проводнике работает в виртуальном режиме и не видимые в данный момент файлы вообще не нуждаются в отрисовке иконок (хотя в фоне они извлекаются). Это не главная причина "тормозов".

Зайди в Linux в папку c миллионами файлов через консольный файловый менеджер, типа MC - тоже придется подождать.


 
Dimka Maslov ©   (2016-05-22 11:09) [8]


> Она не по этому тормозит. Там самое медленное это получение
> иконки к файлу, папке.


При определении размеров папки иконки не нужны. Но система тормозит.


 
Pavia ©   (2016-05-22 12:19) [9]


> При определении размеров папки иконки не нужны. Но система
> тормозит.

Не тормозит, а работает.


> Зайди в Linux в папку c миллионами файлов через консольный
> файловый менеджер, типа MC - тоже придется подождать.

Возьмите DOS там ждать не надо.
По поводу миллиона. Як дети теория алгоритмов для кого придумана была? Конечно если взять параметр N большим, то и задача будет решаться долго. Но это не значит что она тормозит! Так как к любой задаче можно найти N который читается за секунды, минуты. Поэтому алгоритмы и сравнивают по O() или по удельному значению.


 
Kerk ©   (2016-05-22 12:31) [10]


> Конечно если взять параметр N большим, то и задача будет
> решаться долго. Но это не значит что она тормозит!

А скорость выполнение единичной итерации конечно никак на скорость работы не влияет. Влияет только N.


 
Dimka Maslov ©   (2016-05-22 17:38) [11]


> она тормозит!


Таки тормозит. Или вообще не работает, а показывает прогрессбар.


 
DVM ©   (2016-05-22 17:40) [12]


> Pavia ©   (22.05.16 12:19) [9]


> Возьмите DOS там ждать не надо.

Везде надо. Волшебства не бывает. Во времена DOS миллионы файлов в папках не хранили.


 
Rouse_ ©   (2016-05-23 10:56) [13]

Варианта всего два:
1. использовать NtQueryDirectoryFile - ну небольшое ускорение будет - но не сильно заметное.
2. ручками парсить структуру диска, учитывая что там может быть как NTFS, так и FAT16/FAT32.
Это будет пошустрее, но опять-же не супер шустро.


 
han_malign ©   (2016-05-24 11:55) [14]


> Варианта всего два:

- начиная с Vista есть честная обертка к NtQueryDirectoryFile - GetFileInformationByHandleEx...


 
Empleado ©   (2016-05-25 10:14) [15]

Понятно.
Спасибо всем.


 
Dimka Maslov ©   (2016-05-25 17:59) [16]


> начиная с Vista есть честная обертка к NtQueryDirectoryFile
> - GetFileInformationByHandleEx...


Только её до сих пор не потрудились прописать в Delphi... По меньшей мере, в XE9 её ещё не было.



Страницы: 1 вся ветка

Текущий архив: 2017.07.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.006 c
11-1265717864
tippa
2010-02-09 15:17
2017.07.16
runtime error 216


15-1463758069
Empleado
2016-05-20 18:27
2017.07.16
Получение данных о папке без FindFirst..FindNext


15-1463911682
MsGuns
2016-05-22 13:08
2017.07.16
VS-2014/MS SQL Server


2-1441812254
pavelnk
2015-09-09 18:24
2017.07.16
Просветите по округлению


15-1463492615
Crysis
2016-05-17 16:43
2017.07.16
Отловить завершение чужих потоков