2011-08-16 47 views

回答

15

我用下面的擴展方法做到這一點:

public static long Size(this DirectoryInfo Directory, bool Recursive = false) 
    { 
     if (Directory == null) 
      throw new ArgumentNullException("Directory"); 
     return Directory.EnumerateFiles("*", Recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly).Sum(x => x.Length); 
    } 
+1

這給了最小的磁盤空間。不考慮塊大小,也不佔用目錄本身使用的空間。 –

2

您需要遞歸地枚舉文件夾中,總結了文件大小。請記住包含正確大小的系統文件和隱藏文件。

下面是一個簡單的版本:

long GetFolderSize(string path) 
{ 
    DirectoryInfo d = new DirectoryInfo(path); 
    var files = d.GetFiles("*", SearchOption.AllDirectories); 
    return files.Sum(fi => fi.Length); 
} 

請記住,一個文件可能佔用更多的空間磁盤比它的長度上,因爲一個文件總是佔用文件系統上塊的整數(以對你的應用很重要的情況)。

2

您需要從您的目錄(包括子目錄)中獲取所有文件,並在sum循環中獲取它們的大小。例如:

static long GetDirectorySize(string path) 
{ 
    string[] files = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories); 

    long size = 0; 
    foreach (string name in files) 
    { 
     FileInfo info = new FileInfo(name); 
     size += info.Length; 
    } 

    return size; 
} 
+0

不包括子目錄。 – driis

+0

@driis,修正它。 –

相關問題