Прогресбар для поиска

Тема в разделе "WASM.BEGINNERS", создана пользователем assorted, 24 июл 2007.

  1. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Нужно отображать прогрес рекурсивного поиска файлов по лог. диску

    Реализовал следующим образом.
    1) Получаю размер занятого пространства на лог. диске. (как разницу общего объема и свободного)
    2) суммирую объемы найденых файлов в переменную.
    3) отображаю прогресс как отношение этих двух переменных

    Проблема в том что в идеале должна получиться единица, но на деле я этого не наблюдаю. При поиске по системному разделу получаю знаение около 4 а при поиске напимер по флешке - менее единици. Подозреваю что дело в том что каталоги - тоже занимают место, но у меня это не учитываеся.

    Подскажите в какую сторону мыслить...
     
  2. mAgoja

    mAgoja New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    114
    Адрес:
    Ukraine
    assorted
    чот я не въехал при чем у тебя тут единица или четыре???? перефразируй...
    А не легче те будет создать прогресс так:
    юзер указал папку;
    poloska = занимаемое место этой папки / 10 (количество полосок в прогрессе);
    Суммируй размер пройденных файлов в переменную(int size);
    size = size / poloska; Вставляй прогресс количество полосок равное = size;
    Конечно вариант не самый лучший но.....
     
  3. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    а папки кто считать будет?
     
  4. mAgoja

    mAgoja New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2004
    Сообщения:
    114
    Адрес:
    Ukraine
    t00x
    Считай... :)
     
  5. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    считайте по этой сумме. объём всего диска сложный вопрос.
    зависит от файловой системы, количества свободного места, количества файлов в папках, размера кластера.
     
  6. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    mAgoja Чутоку научнее, не понял общего смысла из за "Занимаемое место этой папки" и "количество полосок в прогрессе". Похоже это то же самое что и предлагал я. А значит то же не работоспособно.
    Может я не совсем внятно написал единица и четыре это значения прогрессбара. Единица - 100% Четыре - 400%

    Самое странное что сумма объемов найденых файлов БОЛЬШЕ чем объем занятого пространства которое выдает система, на 19 Гб файлов разница получается около 100Мб В четыре раза я конечно перегнул.

    Жду советов.
     
  7. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    $MFT и прочие файлы NTFS учёл?
    А если разница в большую сторону, то смотри, не сжаты ли были файлы.
     
  8. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    assorted
    Поиск идет он названию файла или по содержимому? Если первое, то по размеру строить прогресс не правильно IMHO, нужно по количеству.
     
  9. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    IceStudent FindFirst и findNext не ищут $MFT. Наудивление разница в большую сторону.

    KeSqueer по маске *.* По количеству - звучит очень заманчево. Только вот как получить количество файлов без из поиска? Кажется никак.

    Всевозможные антивирусы - как то это делают, сканируют каталог или раздел и отображают прогресс, заранее не зная сколько им встретится файлов.
     
  10. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Все же наверное они так и делают. Нажми Alt-Enter на Program Files, сразу ли винда покажет кол-во файлов?
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    assorted
    Парсить ФС напрямую, это будет быстрее (посмотрите, насколько быстро получает кол-во файлов и анализ фрагментированности тома какой-нибудь дефрагментатор).

    KeSqueer
    Не сразу, т.к. она использует обычный поиск.

    Это количество придётся получить быстро и перед самим поиском, чтобы выставить максимальное значение прогрессбара :)
     
  12. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Как раз-таки зная. IceStudent, собственно, уже ответил. Опираться в расчетах на свободное место - криво и неудобно.
     
  13. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    IceStudent вобщем то моя программа должна и просканировать диск, но сканировать диск дважды - явно не выход.

    Про $MFT и прочие файлы NTFS повторюсь - суммарный объем файлов полученых при сканировании ПРЕВЫШАЕТ объем реально занятого прстранства.

    Эти же цифры можно увидеть в свойствах достаточно большой папки. "Размер" и "На диске" Это обусловлено, как я понимаю размером кластера?
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    assorted
    Невнимательно читал пост #7.
     
  15. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    IceStudent что значит сжаты файлы? Я же их не распаковываю...
     
  16. assorted

    assorted New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2006
    Сообщения:
    227
    Вобщем нашел решение - прогресс ползет до 95%, затем его останвливаю, и по завершению поиска искуственно его устанавливаю на 100%. Не очень то равномерно, конечно, но думаю лучше ничего не сделаешь.
     
  17. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    В NTFS сжатие встроено в саму файловую систему. Можно сжимать как отдельный файл, так и директорию или весь том. При этом данные файлов, попадающих в "сжатые" контейнеры, автоматически сжимаются. Если посмотреть свойства сжатого каталога, то можно увидеть, что поле "размер" больше, чем "на диске".

    Это лишь предположение, твоя проблема может быть и в другом.
     
  18. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    GetCompressedFileSize - мож стоит заюзать
     
  19. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    вопрос зачем ? не проще ли вывести какой-нибудь циклически повторяющийся елемент (чтобы юзер не скучал сильно и видел что процесс идёт), где вы видели что-бы поиск отображался от 0 до 1 ?
     
  20. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Не каждому юзеру такое интересно. Я бы предпочёл точный прогресс-бар неопределённой анимации.