Пишу одну тулзовину на C используя WinAPI. В ней есть одна функциональность - поиск файлов на диске по определенным критериям. Необходимо отобразить при помощи Progress Bar-a сам процесс проверки файлов по определенному. Вопрос в том как расчитать шаг для этого контрола. Пример - Progress Bar в диалоге, например, когда мы выполняем копирование или удаление. Была задумка подсчитать общее количество файлов на диске, но это не оптимально. Немного подумав, пришел в выводу, что надо делать привязку по размерам проверяемых файлов и размеру диска. Так вот как сделать такую привязку или отображение на Progress Bar-e? То есть сколько файлов проверено, и сколько осталось проверить. PS Всю башку себе изломал.
хм... мне кажется чтобы делать прогресс бар по размеру файла нужно будет определить размер всех сканируемых файлов для начала а это нагружает систему лишний раз поправте меня если я не прав
Ну в принципе размер всех сканируемых определяется исходя из общего размера диска минус размер свободного пространства. И то и то получается. То есть общий объем, занимаемый всеми файлами на диске в системе мне известен.
ну да, можно по размеру. файлов. А чтобы узнать размер файла, то не надо особо напрягаться. да и система не напрягается тоже при отдаче размера. потомучто берет из файловой системы. Темболее когда ишешь через FindFirstFile то можно заюзать так: Ищи все файлы, а там проверяй вручкую что тебе нужно а из структуры WIN32_FIND_DATA бери размер файла DWORD nFileSizeHigh; DWORD nFileSizeLow; Главное не напороться на один подводный камень. Размер файла - это одно, а занимаемое место файлом - это другое. т.е. надо учитывать остаток кластера. По этому размер так идет: Занятое место на диске = занятое место файлом 1 + занятое место файлом 2 +.... занятое место файлом = размер файла + остаток кластера занятое место файлом можно вычислить как: 1) если размер файл кратен размеру кластера, то занятое место равно размеру файла. 2) если размер файла не кратен размеру кластера, то занятое место равно ((целая часть от деления размера файла на размер кластера)+1) * на размер кластера. Можно и проще считать но это уже другая история.
Всем спасибо за советы и ответы... А через ядро это можно как-то замутить? То есть напрямую обратиться из UserSpace в ядро посредством какого-либо вызова, и получить инфо о файловой системе, то есть кол-во файлов, размер и т.п?
2 KaE увы никак. потому что кол-во файлов тебе не скажет файловая система, потому что каталоги имеют иерархическую структуру. т.е. каждый каталог знает только а файлах и папках которые расположены в нем, что находится в других каталогах он знать не может. Именно по этому вычисления кол-ва файлов - это задача быстрого обхода каталогов и проверки кол-ва файлов в них.