Нужно отображать прогрес рекурсивного поиска файлов по лог. диску Реализовал следующим образом. 1) Получаю размер занятого пространства на лог. диске. (как разницу общего объема и свободного) 2) суммирую объемы найденых файлов в переменную. 3) отображаю прогресс как отношение этих двух переменных Проблема в том что в идеале должна получиться единица, но на деле я этого не наблюдаю. При поиске по системному разделу получаю знаение около 4 а при поиске напимер по флешке - менее единици. Подозреваю что дело в том что каталоги - тоже занимают место, но у меня это не учитываеся. Подскажите в какую сторону мыслить...
assorted чот я не въехал при чем у тебя тут единица или четыре???? перефразируй... А не легче те будет создать прогресс так: юзер указал папку; poloska = занимаемое место этой папки / 10 (количество полосок в прогрессе); Суммируй размер пройденных файлов в переменную(int size); size = size / poloska; Вставляй прогресс количество полосок равное = size; Конечно вариант не самый лучший но.....
считайте по этой сумме. объём всего диска сложный вопрос. зависит от файловой системы, количества свободного места, количества файлов в папках, размера кластера.
mAgoja Чутоку научнее, не понял общего смысла из за "Занимаемое место этой папки" и "количество полосок в прогрессе". Похоже это то же самое что и предлагал я. А значит то же не работоспособно. Может я не совсем внятно написал единица и четыре это значения прогрессбара. Единица - 100% Четыре - 400% Самое странное что сумма объемов найденых файлов БОЛЬШЕ чем объем занятого пространства которое выдает система, на 19 Гб файлов разница получается около 100Мб В четыре раза я конечно перегнул. Жду советов.
assorted Поиск идет он названию файла или по содержимому? Если первое, то по размеру строить прогресс не правильно IMHO, нужно по количеству.
IceStudent FindFirst и findNext не ищут $MFT. Наудивление разница в большую сторону. KeSqueer по маске *.* По количеству - звучит очень заманчево. Только вот как получить количество файлов без из поиска? Кажется никак. Всевозможные антивирусы - как то это делают, сканируют каталог или раздел и отображают прогресс, заранее не зная сколько им встретится файлов.
Все же наверное они так и делают. Нажми Alt-Enter на Program Files, сразу ли винда покажет кол-во файлов?
assorted Парсить ФС напрямую, это будет быстрее (посмотрите, насколько быстро получает кол-во файлов и анализ фрагментированности тома какой-нибудь дефрагментатор). KeSqueer Не сразу, т.к. она использует обычный поиск. Это количество придётся получить быстро и перед самим поиском, чтобы выставить максимальное значение прогрессбара
Как раз-таки зная. IceStudent, собственно, уже ответил. Опираться в расчетах на свободное место - криво и неудобно.
IceStudent вобщем то моя программа должна и просканировать диск, но сканировать диск дважды - явно не выход. Про $MFT и прочие файлы NTFS повторюсь - суммарный объем файлов полученых при сканировании ПРЕВЫШАЕТ объем реально занятого прстранства. Эти же цифры можно увидеть в свойствах достаточно большой папки. "Размер" и "На диске" Это обусловлено, как я понимаю размером кластера?
Вобщем нашел решение - прогресс ползет до 95%, затем его останвливаю, и по завершению поиска искуственно его устанавливаю на 100%. Не очень то равномерно, конечно, но думаю лучше ничего не сделаешь.
В NTFS сжатие встроено в саму файловую систему. Можно сжимать как отдельный файл, так и директорию или весь том. При этом данные файлов, попадающих в "сжатые" контейнеры, автоматически сжимаются. Если посмотреть свойства сжатого каталога, то можно увидеть, что поле "размер" больше, чем "на диске". Это лишь предположение, твоя проблема может быть и в другом.
вопрос зачем ? не проще ли вывести какой-нибудь циклически повторяющийся елемент (чтобы юзер не скучал сильно и видел что процесс идёт), где вы видели что-бы поиск отображался от 0 до 1 ?