gpt4 book ai didi

c# - 如何在磁盘上获取准确的目录大小

转载 作者:可可西里 更新时间:2023-11-01 14:42:45 24 4
gpt4 key购买 nike

我是 Windows 文件系统的新手,几天来一直被这个问题困扰。我正在使用 C# 进行编码,我想要的是获取目录的确切“磁盘大小”,如 Windows 7 上目录的“属性”对话框中显示的那样。

现在我能够得到一个粗略的数字,遍历目录中的每个文件和每个子目录,使用 kernel32.dll 中的 API GetCompressedFileSize 获取压缩文件和FileInfo.Length 属性四舍五入为普通文件的簇大小的倍数。

我发现有些文件共享簇(?)(磁盘上的大小不是簇大小的倍数)而其他文件单独占用簇,那么我无法获得磁盘上的确切大小,是否将大小四舍五入为倍数簇大小与否。

还有一些不占用磁盘空间的符号链接(symbolic link),我找不到办法将它们与普通目录区分开来。我得到的尺寸比实际尺寸大得多,因为我无法避免计算这些链接的尺寸。

我想一定有一个 API 或其他东西来获取磁盘上的确切文件或目录大小。那是什么?还是有更简单/更快的方法来做到这一点?感谢您的帮助!

最佳答案

这是一种更简洁的方法:-

private static long GetDirectorySize(string path)
{
DirectoryInfo dir = new DirectoryInfo(path);
return dir.EnumerateFiles("*.*", SearchOption.AllDirectories).Sum(file=> file.Length);
}

基本上,EnumerateFiles返回一个 FileInfo 列表,我们使用它的 Length 属性来计算目录的总文件大小。

虽然它仍然使用递归来获取目录大小,但它确实是一种更简洁的方法。

要使用 C# 获取磁盘上的大小,您必须深入挖掘,例如使用 GetDiskFreeSpace

此外,请查看以下 msdn thread

希望这对您有所帮助!

关于c# - 如何在磁盘上获取准确的目录大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21507085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com