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

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

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

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

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

没有其他办法吗?

这个怎么样:

 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)。

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

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