我是 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/