我希望获得压缩磁盘上的可用空间,以便向最终用户显示。我在Windows 2000及更高版本上使用C ++,MFC。 Windows API提供GetDiskFreeSpaceEx()
功能。
但是,此函数似乎返回“未压缩”大小的数据。这引起了我一些问题。
例如: - 磁盘大小为100 GB - 数据大小为90 GB - 压缩数据大小为80 GB
用户将看到磁盘已满90%,但实际上只有80%已满。
修改
正如Gleb指出的那样,该功能正在返回好的信息。
所以这是一个新问题:有没有办法同时获得压缩大小和未压缩大小?
答案 0 :(得分:1)
该函数正确返回可用空间量。这可以通过使用这个简单的程序来证明。
#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);
}
压缩以前未压缩的目录后,可用空间会增加。
那你在说什么?
答案 1 :(得分:1)
我认为您必须映射所有文件,使用 GetFileSize()和 GetCompressedFileSize()查询并总结它们。使用 GetFileAttributes()来了解文件是否已压缩,以防仅压缩整个卷的某些部分,这可能就是这种情况。
嗯,嗯,这不是一件小事 操作。我想我必须实施 一些避免查询所有的机制 文件大小始终。我的意思是......如果 我有一个800GB的硬盘,它可以 花了很长时间才能得到所有 文件大小。
真。
也许从全面扫描(应用程序启动)开始,然后填充自定义数据结构,例如:从文件名到文件数据结构/类的散列/映射,然后使用 FindFirstChangeNotification()轮询驱动器并相应地更新内部结构。
您可能还想阅读“更改日记”。我自己从未使用过它们,所以不知道它们是如何工作的,但可能值得一试。