【问题标题】:Calculate NTFS and FAT file sytem size in Windows在 Windows 中计算 NTFS 和 FAT 文件系统大小
【发布时间】: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


【解决方案1】:

没有意义。在 NTFS 上,小文件存储在 目录中。我的意思是从字面上看,它们是内联的。保存文件名的同一扇区也保存文件内容。因此,您不能将该扇区视为“用于文件”或“用于文件系统开销”。

【讨论】:

    猜你喜欢
    • 2016-09-10
    • 2017-04-14
    • 2015-05-28
    • 2012-02-06
    • 1970-01-01
    • 2022-01-07
    • 2021-08-25
    • 2013-07-29
    相关资源
    最近更新 更多