フォルダーのサイズを取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/137387

  •  02-07-2019
  •  | 
  •  

質問

フォルダサイズを毎日記録する古いアプリを変換しています。レガシーアプリは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純度を損なう場合でも同様に機能します。内部報告アプリ用であるため、それほど大したことではありません。

役に立ちましたか?

解決

あなたはすでに答えを知っていると思います。ディレクトリ内のすべてのファイル(およびその子ディレクトリ)を追加する必要があります。このための組み込み関数は知りませんが、すべてを知っているわけではありません(閉じていません)。

他のヒント

悲しいことに、はい...誰が理由を知っています。

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

Mads Kristensen 投稿しばらく前...

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;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top