ファイルが多すぎるフォルダがあり、各ファイルを1つずつ確認したいと思います。問題は、Directory.GetFilesが完成した配列を返すことであり、これには時間がかかりすぎます。
むしろ、フォルダーを指すオブジェクトを作成してから、フォルダー内の次のファイルを返す関数を呼び出します。.NETにはこのようなクラスがありますか?
(Monoでもこれを使用する予定なので、win32相互運用機能は避けたいと思います。)
どうもありがとう。
このブログ投稿によると、.NET 3.5ではこれを行うことはできませんが、.NET4.0では行うことができます。
DirectoryInfo directory = new DirectoryInfo(@"\\share\symbols");
IEnumerable<FileInfo> files = directory.EnumerateFiles();
foreach (var file in files) {
Console.WriteLine("Name={0}, Length={1}", file.Name, file.Length);
}
(同様に、静的Directory.EnumerateFiles
メソッドがあります。)
そのAPIがMonoに移植されているかどうかはまだわかりません。
CodeProjectWebサイトのFastDirectoryEnumeratorプロジェクトを見てください。
それはあなたが必要としていることを正確に実行し、さらに多くのファイルを含む低速のネットワーク共有で正常に使用することができ、パフォーマンスは素晴らしかったです。
欠点-相互運用機能を使用しているため、Monoに移植できない場合があります。