这里是 C# 菜鸟,我正在尝试执行一个应用程序来计算目录的大小。使用 this例如,我创建了以下方法:
public static long CalculateSize(DirectoryInfo dir, string search = "*.*")
{
long result = 0;
FileInfo[] files = null;
DirectoryInfo[] subDirs = null;
try
{
files = dir.GetFiles(search, SearchOption.TopDirectoryOnly);
}
catch (UnauthorizedAccessException)
{
//catch unauthorized exception
}
catch (PathTooLongException e)
{
Console.WriteLine("PATH: " + e.Message);
}
if (files != null)
{
foreach (var file in files)
{
result += file.Length;
}
subDirs = dir.GetDirectories(search, SearchOption.TopDirectoryOnly);
foreach (var directory in subDirs)
{
result += CalculateSize(directory, search);
}
}
return result;
}
虽然当我运行它时:
var dir = new DirectoryInfo("C:\\Users\\");
var size = FileSystem.CalculateSize(dir);
Console.WriteLine(size);
文件资源管理器向我展示了几乎两倍的大小: 我的结果 -> 33189002865 文件浏览器属性 -> 12263901898 我对此进行了测试,将“result += file.Length”替换为“result++”以获取该方法迭代的文件数,并且那里也有很大差异: 我的结果 -> 94476 文件解释 -> 59318
当我在我的另一个驱动器 (D:) 上测试它时,我得到的结果与文件资源管理器完全相同,无论我是否在我的根目录、里面的某个文件夹等上运行它。但是每当我在我的系统驱动器 (C :) - 得到这个奇怪的结果。我不知道我做错了什么,非常感谢您的帮助!
附言如果相关,我会在 Windows 10 Pro 64 位上运行我的测试。
最佳答案
这是文件资源管理器算法的问题,该算法对某些特定文件夹的大小或权限有影响。
路径的文件资源管理器:
C:\Users\All Users
不会显示尺寸等任何信息。
所以如果你要检查这个路径:
C:\Users\
它不会计算 "C:\Users\All Users" 的大小。但是您的脚本会计算它的大小。
获取文件夹大小的更好的 Windows 工具是 cmd 中的 DIR。
打开你的cmd,然后写下:
cd Users
dir /s /a
/s - 显示指定目录下的所有文件和文件夹
/a - 显示所有类型的文件和文件夹
(对不起波兰语)
C:\Users\(您的程序和 dir/s/a)的良好计算图片:
什么显示 C:\Users\的文件资源管理器:
关于C# 计算目录大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49363965/