8

可能重复:
如何在 C# 中获取目录大小(目录中的文件)?

在 vbscript 中,以 GB 或 MB 为单位获取文件夹大小非常简单:

Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim fSize = CInt((oFSO.GetFolder(path).Size / 1024) / 1024)
WScript.Echo fSize

在 C# 中,通过我的所有搜索,我所能想到的只是对所有子文件夹中的每个文件大小进行长而复杂的递归搜索,然后在最后将它们全部加起来。

难道没有别的办法了吗?

4

2 回答 2

27

这个怎么样:

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

这里

这将为您提供以字节为单位的大小;您将不得不将其“美化”为 GB 或 MB。

注意:这仅适用于 .NET 4+。

编辑:根据我链接到的线程中的评论将通配符搜索从更改"*.*"为。"*"这应该将其可用性扩展到其他操作系统(例如,如果使用 Mono)。

于 2012-08-28T19:44:42.147 回答
4

您还可以使用递归来获取所有子目录并对大小求和:

public static long GetDirectorySize(string path){
    string[] files = Directory.GetFiles(path);
    string[] subdirectories = Directory.GetDirectories(path);

    long size = files.Sum(x => new FileInfo(x).Length);
    foreach(string s in subdirectories)  
        size += GetDirectorySize(s);

    return size;
}
于 2012-08-28T20:14:56.267 回答