有很多关于如何获取目录大小的问题和答案 - 递归地求和文件的长度 - 很简单。
然而,我看到的所有答案都不完整。在您递归遍历卷的地方,有些目录会引发异常 - 例如 UnauthorizedAccessException
。我还注意到在 Win 7 中有超过 260 个字符的路径,这会引发 PathTooLongException
。
所有这一切意味着,至少在 C# 中,您无法扫描 C:\驱动器并获得有关卷大小的真实数字,因为您必须跳过任何引发异常的目录或文件。
我正在寻找一种方法来为给定目录的磁盘上存储的字节数获取正确、真实、准确的数字。我不在乎我是否必须进入低级别并编写一些 C++,或调用 Win API。
如何实现?谢谢。
最佳答案
这并不容易,但可以做到,虽然我不确定您是否可以从本质上克服权限问题,但您必须做的是进入较低级别并直接读取 NTFS 主文件表,如中所示这个很棒的 piece of code 由 this caring developer 分享,他从另一个这样的开发人员那里得到了想法。
这是可以帮助您的 a reference。谷歌“NTFS 架构”或设计更多规范。 请分享您的一些工作和研究:) 这将对许多人有所帮助
编辑: Another project 这可能对你有帮助。经过测试,它说它只支持 NTFS 3.0 或更高版本。
关于C#/C++ - 如何获取路径太长或权限被拒绝的目录的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429416/