2008-09-26 153 views
0

我正在转换一个每天记录文件夹大小的旧应用程序。继承应用程序使用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纯度,也是如此。这是一个内部报告应用程序,所以这不是什么大不了的事情。

回答

2

我想你已经知道答案;你需要将目录中的所有文件(以及它的子目录)相加。我不知道任何内置函数,但是,嘿,我不知道所有的东西(甚至没有关闭)。

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

0

的Mads克里斯滕森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; 
} 
+0

的链接断开。 – 2011-09-16 08:39:06