フォルダーとサブフォルダーを繰り返して、指定された場所から開始する各フォルダー内のファイルサイズ、ファイルの総数、およびフォルダーの合計サイズを取得する最良の方法は何ですか?
Directory.GetFiles() を使用します。そのページの下部には、完全に再帰的な例が含まれていると思います。
.NET 4を使用している場合は、System.IO.DirectoryInfo.EnumerateDirectories
およびSystem.IO.DirectoryInfo.EnumerateFiles
メソッドを使用できます。他の投稿が推奨しているようにDirectory.GetFiles
メソッドを使用する場合、すべてのエントリを取得するまでメソッド呼び出しは戻りません。再帰を使用している場合、これには長い時間がかかる可能性があります。
ドキュメント から:
EnumerateFiles
メソッドとGetFiles
メソッドは次のように異なります。
EnumerateFiles
を使用すると、コレクション全体が返される前に、FileInfo
オブジェクトのコレクションの列挙を開始できます。GetFiles
を使用する場合、FileInfo
オブジェクトの配列全体が返されるのを待ってから、配列にアクセスできます。したがって、多くのファイルとディレクトリを操作している場合、
EnumerateFiles
の方が効率的です。
サブフォルダーとファイルの量に関係なく、すべてのディレクトリのサブフォルダーとファイルを反復処理します。
string [] filenames;
fname = Directory.GetFiles(jak, "*.*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x)).ToArray();
次に、配列から、ループを介して、または必要に応じて必要なものを取得できます。
検証チェックを実行する必要があることに注意してください。
string[] fileNames = Directory.GetFiles("c:\\", "*.*", SearchOption.AllDirectories);
int fileCount = fileNames.Count();
long fileSize = fileNames.Select(file => new FileInfo(file).Length).Sum(); // in bytes
ファイルとフォルダーを反復処理するには、通常 DirectoryInfo および FileInfo タイプを使用します。 FileInfoタイプには、ファイルサイズをバイト単位で返すLengthプロパティがあります。
ファイルを反復処理して合計ファイルサイズを計算するには、独自のコードを記述する必要があると思いますが、これは非常に単純な再帰関数である必要があります。