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

Posted

技术标签:

【中文标题】C#/C++ - 如何获取路径太长或权限被拒绝的目录大小?【英文标题】:C#/C++ - how to get size of directory where path is too long, or permission denied? 【发布时间】:2012-11-17 09:44:00 【问题描述】:

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

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

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

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

如何做到这一点?谢谢。

【问题讨论】:

Size of a directory 的可能重复项 它不是重复的 - 链接的问题再次没有解决您遇到的问题,而是它只是有另一个递归算法。 但是答案说没有API可以调用。这很重要! 关于长路,你看到了吗:blogs.msdn.com/b/bclteam/archive/2007/02/13/… 您需要卷/磁盘的总大小还是特别是目录的大小? 【参考方案1】:

这并不容易,但可以做到,虽然我不确定您是否可以克服权限问题,但您必须做的是进入较低级别并直接读取 NTFS 主文件表,如图所示这个美妙的piece of code 由this caring developer 分享,他的想法是从另一个这样的开发者那里得到的。

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

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

【讨论】:

看起来很有希望,感谢您提供的信息,我会尝试一下。 (博佩尔松注意:))

以上是关于C#/C++ - 如何获取路径太长或权限被拒绝的目录大小?的主要内容,如果未能解决你的问题,请参考以下文章

c#winForm动态创建文件夹访问被拒绝

“对路径的访问被拒绝.” 是怎么回事

“对路径的访问被拒绝.” 是怎么回事

“对路径的访问被拒绝.” 是怎么回事

C盘访问被拒绝?

对路径的访问被拒绝怎么办?