C#/C++ - 如何获取路径太长或权限被拒绝的目录的大小?

标签 c# c++ winapi

有很多关于如何获取目录大小的问题和答案 - 递归地求和文件的长度 - 很简单。

然而,我看到的所有答案都不完整。在您递归遍历卷的地方,有些目录会引发异常 - 例如 UnauthorizedAccessException。我还注意到在 Win 7 中有超过 260 个字符的路径,这会引发 PathTooLongException

所有这一切意味着,至少在 C# 中,您无法扫描 C:\驱动器并获得有关卷大小的真实数字,因为您必须跳过任何引发异常的目录或文件。

我正在寻找一种方法来为给定目录的磁盘上存储的字节数获取正确、真实、准确的数字。我不在乎我是否必须进入低级别并编写一些 C++,或调用 Win API。

如何实现?谢谢。

最佳答案

这并不容易,但可以做到,虽然我不确定您是否可以从本质上克服权限问题,但您必须做的是进入较低级别并直接读取 NTFS 主文件表,如中所示这个很棒的 piece of codethis caring developer 分享,他从另一个这样的开发人员那里得到了想法。

这是可以帮助您的 a reference。谷歌“NTFS 架构”或设计更多规范。 请分享您的一些工作和研究:) 这将对许多人有所帮助

编辑: Another project 这可能对你有帮助。经过测试,它说它只支持 NTFS 3.0 或更高版本。

关于C#/C++ - 如何获取路径太长或权限被拒绝的目录的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13429416/

相关文章:

c# - C# 中的负标志

c++ - 预构建代码块中的 .rc 到 .o 转换,访问文件的权限被拒绝

c++ - 无法命名我的函数 CreateWindow

c++ - 预期指针错误 vector 的迭代器;

c++ - CFile::osNoBuffer 标志在写入文件时导致异常

c# - 在字典中的对象上使用锁会产生 KeyNotFoundException

c# - asp.net应用默认文件Index.aspx

c# - 用于 JQuery 日期时间选择器的 ASP.Net 包装器控件

c++ - DirectX 绘制顶点数组,不绘制顶点 vector

c++ - 基于堆栈的缓冲区溢出