GetDiskFreeSpaceEx со сжатым диском
Вопрос
Я хочу получить свободное место на сжатом диске, чтобы показать его конечному пользователю.Я использую C++, MFC в Windows 2000 и более поздних версиях.Windows API предлагает GetDiskFreeSpaceEx()
функция.
Однако эта функция, похоже, возвращает «несжатый» размер данных.Это вызывает у меня некоторые проблемы.
Например :- Размер диска составляет 100 ГБ - размер данных составляет 90 ГБ - размер сжатых данных - 80 ГБ
Пользователь увидит, что диск заполнен на 90%, но на самом деле он заполнен только на 80%.
РЕДАКТИРОВАТЬ
Как отметил Глеб, функция возвращает полезную информацию.
Итак, новый вопрос:Есть ли способ получить как сжатый, так и несжатый размер?
Решение
Я думаю, вам придется сопоставить все файлы, выполнить запрос с помощью ПолучитьРазмерФайла() и ПолучитьСжатыйРазмерФайла() и суммируем их.Использовать ПолучитьАтрибутыФайла() чтобы узнать, сжат ли файл или нет, в случае, если сжаты только части всего тома, что, безусловно, может быть так.
Гул, так что это не тривиальная операция.Я полагаю, что я должен реализовать какой -то механизм, чтобы избежать запроса всего размера файлов постоянно.Я имею в виду ...Если у меня есть жесткий диск 800 ГБ, может потребоваться очень много времени, чтобы получить весь размер файла.
Истинный.
Возможно, начните с полного сканирования (запуска приложения) и заполните свою собственную структуру данных, например.хэш/карта имени файла в структуру/класс данных файла, затем опросите диск с помощью НайтиFirstChangeNotification() и соответствующим образом обновите свою внутреннюю структуру.
Вы также можете прочитать о «Журналах изменений».Я никогда не использовал их сам, поэтому не знаю, как они работают, но, возможно, стоит проверить.
Другие советы
Функция корректно возвращает количество свободного места.Это можно продемонстрировать с помощью этой простой программы.
#include <stdio.h>
#include <windows.h>
void main() {
ULARGE_INTEGER p1, p2, p3;
GetDiskFreeSpaceEx(".", &p1, &p2, &p3);
printf("%llu %llu %llu\n", p1, p2, p3);
}
После сжатия ранее несжатого каталога свободное пространство увеличивается.
Так о чем ты говоришь?