質問
フォルダサイズを毎日記録する古いアプリを変換しています。レガシーアプリは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;
}
所属していません StackOverflow