c#计算目录大小

时间:2018-03-19 13:18:20

标签: c# windows-10 console-application

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上运行我的测试,如果这是相关的。

1 个答案:

答案 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 )的良好计算图片:

Picture of good calculations

显示C:\ Users \的文件资源管理器:

What shows file explorer