我正在转换一个每天记录文件夹大小的旧应用程序。遗留应用程序使用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纯度,也可以正常工作。这是一个内部报告应用程序,所以它不是一个大问题。
答案 0 :(得分:3)
可悲的是,是的......谁知道为什么。
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
答案 1 :(得分:2)
我认为你已经知道了答案;你将需要添加目录中的所有文件(以及它的子目录。)我不知道任何内置函数,但嘿,我不知道一切(甚至没有关闭)。
答案 2 :(得分:0)
Mads Kristensen posted关于这一段时间......
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;
}