8

重複の可能性:
C# でディレクトリ サイズ (ディレクトリ内のファイル) を取得するにはどうすればよいですか?

vbscript では、フォルダーのサイズを GB または MB で取得するのは非常に簡単です。

Set oFSO = CreateObject("Scripting.FileSystemObject")
Dim fSize = CInt((oFSO.GetFolder(path).Size / 1024) / 1024)
WScript.Echo fSize

C# では、私のすべての検索で、すべてのサブフォルダー内のすべてのファイル サイズに対して、長くて複雑な再帰的な検索を思いつくことができ、最後にそれらをすべて追加します。

他に方法はありませんか?

4

2 に答える 2

27

これはどう:

private static long GetDirectorySize(string folderPath)
{
    DirectoryInfo di = new DirectoryInfo(folderPath);
    return di.EnumerateFiles("*", SearchOption.AllDirectories).Sum(fi => fi.Length);
}

ここから。

これにより、サイズがバイト単位で表示されます。それをGBまたはMBに「整形」する必要があります。

注:これは .NET 4+ でのみ機能します。

編集:リンク先のスレッドのコメントに従って、ワイルドカード検索を から"*.*"に変更しました。"*"これにより、使いやすさが他の OS にも拡張されます (たとえば、Mono を使用している場合)。

于 2012-08-28T19:44:42.147 に答える
4

再帰を使用してすべてのサブディレクトリを取得し、サイズを合計することもできます。

public static long GetDirectorySize(string path){
    string[] files = Directory.GetFiles(path);
    string[] subdirectories = Directory.GetDirectories(path);

    long size = files.Sum(x => new FileInfo(x).Length);
    foreach(string s in subdirectories)  
        size += GetDirectorySize(s);

    return size;
}
于 2012-08-28T20:14:56.267 に答える