Конференция "Прочее" » Получение данных о папке без FindFirst..FindNext
 
  • Empleado © (20.05.16 18:27) [0]
    Добрый вечер,

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

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

    Спасибо.
  • Dimka Maslov © (20.05.16 20:33) [1]
    Даже сама винда при отображении папок с большим числов файлов создаёт список медленно и постепенно. Следовательно, всё равно используются FindFirstFile и FindNextFile
  • K-1000 © (21.05.16 06:19) [2]
    А почему эти функции нельзя использовать?
  • DVM © (21.05.16 12:37) [3]
    Ну если для локального HDD еще можно что-либо придумать (но не факт, что будет быстрее), то для сетевых дисков вряд ли.
  • Empleado © (21.05.16 23:27) [4]

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

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

    Да и подумалось, может за последний десяток лет появилось более оптимальное/радикальное средство сбора информации о папках?...
  • Германн © (22.05.16 01:18) [5]
    Ну тут есть естественный вопрос к ТС. А что есть "папка" в твоём понимании?
  • Pavia © (22.05.16 09:08) [6]
    Профессионалы с Sources.ru вручную набирают NFTS. Говорят получается быстрее.


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

    Она не по этому тормозит. Там самое медленное это получение иконки к файлу, папке.
  • DVM © (22.05.16 10:14) [7]

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


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

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

    Зайди в Linux в папку c миллионами файлов через консольный файловый менеджер, типа MC - тоже придется подождать.
  • Dimka Maslov © (22.05.16 11:09) [8]

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


    При определении размеров папки иконки не нужны. Но система тормозит.
  • Pavia © (22.05.16 12:19) [9]

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

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


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

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

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

    А скорость выполнение единичной итерации конечно никак на скорость работы не влияет. Влияет только N.
  • Dimka Maslov © (22.05.16 17:38) [11]

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


    Таки тормозит. Или вообще не работает, а показывает прогрессбар.
  • DVM © (22.05.16 17:40) [12]

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


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

    Везде надо. Волшебства не бывает. Во времена DOS миллионы файлов в папках не хранили.
  • Rouse_ © (23.05.16 10:56) [13]
    Варианта всего два:
    1. использовать NtQueryDirectoryFile - ну небольшое ускорение будет - но не сильно заметное.
    2. ручками парсить структуру диска, учитывая что там может быть как NTFS, так и FAT16/FAT32.
    Это будет пошустрее, но опять-же не супер шустро.
  • han_malign © (24.05.16 11:55) [14]

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

    - начиная с Vista есть честная обертка к NtQueryDirectoryFile - GetFileInformationByHandleEx...
  • Empleado © (25.05.16 10:14) [15]
    Понятно.
    Спасибо всем.
  • Dimka Maslov © (25.05.16 17:59) [16]

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


    Только её до сих пор не потрудились прописать в Delphi... По меньшей мере, в XE9 её ещё не было.
 
Конференция "Прочее" » Получение данных о папке без FindFirst..FindNext
Есть новые Нет новых   [134433   +22][b:0][p:0.001]