如何获取文件夹的大小?
时间:2020-03-06 14:45:42 来源:igfitidea点击:
我正在转换一个旧的应用程序,该应用程序每天记录文件夹的大小。旧版应用程序使用Scripting.FileSystemObject库:
Set fso = CreateObject("Scripting.FileSystemObject") Set folderObject = fso.GetFolder(folder) size = folderObject.Size
System.IO.Directory和System.IO.DirectoryInfo类上没有等效的机制。
为了在.NET中获得相同的结果,我实际上是否必须递归遍历整个文件夹结构,以保持运行中的文件大小总数?
更新:@ Jonathon / Ed谢谢。。。正如我所想到的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。我想我只引用Scripting.FileSystemObject COM库。即使破坏我的应用程序的.NET纯度,效果也一样好。它用于内部报告应用程序,因此没什么大不了的。
解决方案
可悲的是,是的。。。谁知道为什么。
public static long DirSize(DirectoryInfo d) { long Size = 0; // Add file sizes. FileInfo[] fis = d.GetFiles(); foreach (FileInfo fi in fis) { Size += fi.Length; } // Add subdirectory sizes. DirectoryInfo[] dis = d.GetDirectories(); foreach (DirectoryInfo di in dis) { Size += DirSize(di); } return(Size); }
如图所示:
http://msdn.microsoft.com/en-us/library/system.io.directory.aspx
我认为我们已经知道答案了;我们将需要将目录(及其子目录)中的所有文件加起来。我不知道为此目的有任何内置函数,但是,我不知道所有内容(甚至没有关闭)。
Mads Kristensen不久前发布了有关此事的信息...
private double size = 0; private double GetDirectorySize(string directory) { foreach (string dir in Directory.GetDirectories(directory)) { GetDirectorySize(dir); } foreach (FileInfo file in new DirectoryInfo(directory).GetFiles()) { size += file.Length; } return size; }