GetDiskFreeSpaceEx与压缩磁盘

我想获得一个压缩磁盘上的可用空间,以显示给最终用户。 我在Windows 2000和更高版本上使用C ++,MFC。 Windows API提供了GetDiskFreeSpaceEx()函数。

但是,这个函数似乎返回了“未压缩”大小的数据。 这导致我一些问题。

例如: – 磁盘大小为100 GB – 数据大小为90 GB – 压缩数据大小为80 GB

用户将看到磁盘已满90%,但实际上只有80%满了。


编辑

正如Gleb指出的那样,函数返回的是良好的信息。

所以这是一个新的问题:是否有一种方法可以同时获得压缩大小和未压缩大小?

我认为你将不得不映射到所有的文件,查询GetFileSize()GetCompressedFileSize()和总结起来。 使用GetFileAttributes()知道文件是否被压缩,以防万一整个卷的一部分被压缩,这当然可能是这种情况。

嗯,所以这不是一个微不足道的操作。 我想我必须实现一些机制,以避免查询所有文件的大小。 我的意思是…如果我有一个800GB的硬盘,可能需要很长时间才能获得所有的文件大小。

真正。

也许从全面扫描(应用程序启动)开始,然后填充自定义数据结构,例如从文件名到文件数据结构/类的散列/映射,然后使用FindFirstChangeNotification()轮询驱动器并相应地更新您的内部结构。

您可能还想阅读“更改日记帐”。 我从来没有用过它们,所以不知道它们是如何工作的,但可能值得一试。

该函数正确返回可用空间量。 这可以通过使用这个简单的程序来演示。

 #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); } 

压缩之前未压缩的目录后,可用空间增大。

那你在说什么?