如何获取文件夹的大小?
时间: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;
}

