Вопрос

Я хочу получить свободное место на сжатом диске, чтобы показать его конечному пользователю.Я использую 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);
}

После сжатия ранее несжатого каталога свободное пространство увеличивается.

Так о чем ты говоришь?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top