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

C#/C++;-如何获取路径过长或权限被拒绝的目录的大小?,c#,c++,winapi,C#,C++,Winapi,关于如何获得目录的大小(递归地求和文件的长度),有大量的问题和答案,非常简单 然而,我看到的所有答案都是不完整的。在递归迭代卷的地方,有一些目录抛出异常-UnauthorizedAccessException。我还注意到在Win7中有超过260个字符的路径,这会抛出一个PathToolLongException 所有这些都意味着,至少在C#中,您无法扫描C:\驱动器并获得卷大小的真实数字,因为您必须跳过引发异常的任何目录或文件 我正在寻找一种方法,为给定目录中存储在磁盘上的字节获取一个正确、真实

关于如何获得目录的大小(递归地求和文件的长度),有大量的问题和答案,非常简单

然而,我看到的所有答案都是不完整的。在递归迭代卷的地方,有一些目录抛出异常-
UnauthorizedAccessException
。我还注意到在Win7中有超过260个字符的路径,这会抛出一个
PathToolLongException

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

我正在寻找一种方法,为给定目录中存储在磁盘上的字节获取一个正确、真实、准确的数字。我不在乎我是否需要低水平写一些C++,或者调用Win API。p>
如何做到这一点?谢谢。

这并不容易,但可以做到,虽然我不确定您是否能够克服权限问题,但实际上您需要做的是在较低的级别上直接读取NTFS主文件表,如这篇精彩的文章所示,该文章由另一位这样的开发人员分享

这是对你有帮助的。谷歌“NTFS架构”或更多规格的设计。 请分享你的一些工作和研究:)这对很多人都有帮助

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

它的可能副本不是副本-链接的问题同样没有解决您遇到的问题,它只是有另一个递归算法。但答案是没有可调用的API。这很重要!关于长路径,您看到了吗:您需要卷/磁盘的总大小还是目录的大小?这看起来很有希望,感谢您提供的信息,我将尝试一下。(博佩尔松注意到:)