在 Windows 中计算 NTFS 和 FAT 文件系统大小
Posted
技术标签:
【中文标题】在 Windows 中计算 NTFS 和 FAT 文件系统大小【英文标题】:Calculate NTFS and FAT file sytem size in Windows 【发布时间】: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、目录索引等)。 “大多数文件的最后一个集群中的未使用空间” - 现在可以忽略它们。或者,如果您对如何计算有任何其他建议,请随时发布! 【参考方案1】:没有意义。在 NTFS 上,小文件存储在 目录中。我的意思是从字面上看,它们是内联的。保存文件名的同一扇区也保存文件内容。因此,您不能将该扇区视为“用于文件”或“用于文件系统开销”。
【讨论】:
以上是关于在 Windows 中计算 NTFS 和 FAT 文件系统大小的主要内容,如果未能解决你的问题,请参考以下文章