如何在C#中获取文件夹大小?

时间:2012-08-28 19:42:25

标签: c# asp.net size directory

  

可能重复:
  How do I get a directory size (files in the directory) in C#?

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

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

在C#中,通过我的所有搜索,我可以想到的是对所有子文件夹中的每个文件大小进行冗长,复杂的递归搜索,然后在最后添加它们。

没有别的办法吗?

2 个答案:

答案 0 :(得分:22)

这个怎么样:

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

来自here

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

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

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

答案 1 :(得分:3)

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

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;
}