【发布时间】:2011-09-20 15:00:20
【问题描述】:
有人知道如何单独计算文件系统占用的空间量吗?
我正在尝试计算磁盘中文件和目录占用了多少空间,而无需遍历整个磁盘。
这是一个 C++ 示例:
ULARGE_INTEGER freeBytesAvailable, totalNumberOfBytes, totalNumberOfFreeBytes;
GetDiskFreeSpaceEx(NULL, &freeBytesAvailable, &totalNumberOfBytes, &totalNumberOfFreeBytes);
mCurrentProgress = 0;
mTotalProgress = totalNumberOfBytes.QuadPart - totalNumberOfFreeBytes.QuadPart;
但问题是我需要排除文件系统的大小,但我不知道是否有可能或者是否有 API 可以获取此信息。
【问题讨论】:
-
我很确定这是不可能的。我也没有看到很多此类功能的实际用例。
-
请定义“文件系统的大小”。您只计算 MFT、目录索引等还是其他?大多数文件的最后一个集群中的未使用空间怎么办?您是否将其计入文件或文件系统?正如 dauphic 指出的那样,这取决于您如何定义它,这可能是不可能的。
-
我们实际上正在编写一个功能来调查磁盘中的所有用户文件,并且需要为操作提供进度信息,因为它可能非常冗长。我们不能为了计算数据的大小而先遍历整个磁盘(文件夹和文件)。太费时间了...上面的代码没有排除任何导致进度的文件系统,特别是在 NTFS 上与真实相去甚远。我们越接近所有用户数据文件占用的实际空间量就越好。
-
“文件系统的大小”——系统用来管理磁盘上文件的任何东西(MFT、目录索引等)。 “大多数文件的最后一个集群中的未使用空间” - 现在可以忽略它们。或者,如果您对如何计算有任何其他建议,请随时发布!
标签: c++ file winapi size system