C#noob在这里,我试图进行一个应用程序来计算目录的大小。以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 我测试了这个,取代了"结果+ = file.Length"用"结果++"获取方法迭代的文件数量,并在那里得到很大的差异: 我的结果 - > 94476 文件探索 - > 59318
当我在我的另一个驱动器(D :)上测试时,我得到与文件资源管理器完全相同的结果,无论我是在我的root上运行它,在里面的某个文件夹等等。但每当我在我的系统驱动器上测试时(C) :) - 得到这个奇怪的结果。我不知道我做错了什么,并感谢你的帮助!
P.S。我在Windows 10 Pro 64bit上运行我的测试,如果这是相关的。
答案 0 :(得分:3)
文件浏览器算法对某些特定文件夹的大小调整或权限存在问题。
路径的文件浏览器:
C:\Users\All Users
不会显示任何类似大小的信息。
所以,如果你要检查这条路径:
C:\Users\
它不会计算" C:\ Users \ All Users" 的大小。但是你的脚本会计算它的大小。
用于获取文件夹大小的更好的Windows工具是cmd中的DIR。
打开你的cmd,然后写下:
cd Users
dir /s /a
/ s - 显示指定目录中的所有文件和文件夹
/ a - 显示所有类型的文件和文件夹
(对不起波兰语)
C:\ Users \(您的计划和目录/ s / a )的良好计算图片:
显示C:\ Users \的文件资源管理器: