web-dev-qa-db-ja.com

フォルダーとサブフォルダーを繰り返す最適な方法

フォルダーとサブフォルダーを繰り返して、指定された場所から開始する各フォルダー内のファイルサイズ、ファイルの総数、およびフォルダーの合計サイズを取得する最良の方法は何ですか?

34
Rod

Directory.GetFiles() を使用します。そのページの下部には、完全に再帰的な例が含まれていると思います。

29
Lloyd

.NET 4を使用している場合は、System.IO.DirectoryInfo.EnumerateDirectoriesおよびSystem.IO.DirectoryInfo.EnumerateFilesメソッドを使用できます。他の投稿が推奨しているようにDirectory.GetFilesメソッドを使用する場合、すべてのエントリを取得するまでメソッド呼び出しは戻りません。再帰を使用している場合、これには長い時間がかかる可能性があります。

ドキュメント から:

EnumerateFilesメソッドとGetFilesメソッドは次のように異なります。

  • EnumerateFilesを使用すると、コレクション全体が返される前に、FileInfoオブジェクトのコレクションの列挙を開始できます。
  • GetFilesを使用する場合、FileInfoオブジェクトの配列全体が返されるのを待ってから、配列にアクセスできます。

したがって、多くのファイルとディレクトリを操作している場合、EnumerateFilesの方が効率的です。

46
Chris Dunaway

サブフォルダーとファイルの量に関係なく、すべてのディレクトリのサブフォルダーとファイルを反復処理します。

string [] filenames;
 fname = Directory.GetFiles(jak, "*.*", SearchOption.AllDirectories).Select(x => Path.GetFileName(x)).ToArray();

次に、配列から、ループを介して、または必要に応じて必要なものを取得できます。

5
safi

検証チェックを実行する必要があることに注意してください。

string[] fileNames = Directory.GetFiles("c:\\", "*.*", SearchOption.AllDirectories);
int fileCount = fileNames.Count();
long fileSize = fileNames.Select(file => new FileInfo(file).Length).Sum(); // in bytes
2
HuBeZa

ファイルとフォルダーを反復処理するには、通常 DirectoryInfo および FileInfo タイプを使用します。 FileInfoタイプには、ファイルサイズをバイト単位で返すLengthプロパティがあります。

ファイルを反復処理して合計ファイルサイズを計算するには、独自のコードを記述する必要があると思いますが、これは非常に単純な再帰関数である必要があります。

1
Rune Grimstad