2008-09-26 148 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