使用压缩磁盘的 GetDiskFreeSpaceEx

发布于 2024-07-21 05:34:20 字数 616 浏览 6 评论 0原文

我想获取压缩磁盘上的可用空间以将其显示给最终用户。 我在 Windows 2000 及更高版本上使用 C++、MFC。 Windows API 提供 GetDiskFreeSpaceEx()< /a> 函数。

然而,这个函数似乎返回“未压缩”的数据大小。 这给我带来了一些问题。

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

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


编辑

正如 Gleb 指出的,该函数正在返回好的信息。

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

I want to get the free space on a compressed disk to show it to a end user. I'm using C++, MFC on Windows 2000 and later. The Windows API offers the GetDiskFreeSpaceEx() function.

However, this function seems to return the "uncompressed" sized of the data. This cause me some problem.

For example :
- Disk size is 100 GB
- Data size is 90 GB
- Compressed data size is 80 GB

The user will see that the disk is 90% full, but in reality, it is only 80% full.


EDIT

As Gleb pointed out, the function is returning the good information.

So here is the new question : is there a way to get both the compressed size and the uncompressed one?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

多情癖 2024-07-28 05:34:20

我认为您必须映射所有文件,使用 GetFileSize()GetCompressedFileSize() 进行查询并将它们相加。 使用GetFileAttributes() 来了解文件是否被压缩,以防只有整个卷的一部分被压缩,这肯定是这种情况。

嗯,所以这不是一件小事
手术。 我想我必须实施
一些避免查询所有的机制
文件大小始终。 我的意思是...如果
我有一个800GB的硬盘,可以
需要很长时间才能获得全部
文件大小。

真的。

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

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

I think you would have to map over all files, query with GetFileSize() and GetCompressedFileSize() and sum them up. Use GetFileAttributes() to know if a file is compressed or not, in case only parts of the whole volume is compressed, which might certainly be the case.

Hum, so that's not a trivial
operation. I suppose I must implement
some mechanism to avoid querying all
files size all the time. I mean ... if
I have a 800GB hard drive, it could
take some very long time to get all
file size.

True.

Perhaps start off by a full scan (application startup) and populate your custom data structure, e.g. a hash/map from file name to file data struct/class, then poll the drive with FindFirstChangeNotification() and update your internal structure accordingly.

You might also want to read about "Change Journals". I have never used them myself so don't know how they work, but might be worth checking out.

昇り龍 2024-07-28 05:34:20

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

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

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

那么你在说什么?

The function returns the amount of free space correctly. It can be demonstrated by using this simple program.

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

After compressing a previously uncompressed directory the free space grows.

So what are you talking about?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文