Problem
System.IO.Directory.GetFiles, GetDirectoriesは特に大量のファイルがあったとき制御が戻らなくて困る。
EnumerateFiles, EnumerateDirectoriesと一緒にEnumerateFileSystemEntriesがあったので,これを使ってみたかった。
Solution
.NET 4.0以降で使えます。
EnumerateFs.cs
var fsEntries = Directory.EnumerateFileSystemEntries(path, "*.*", SearchOption.AllDirectories);
ReturnはIEnumerable<string>です。結果をフィルターすればディレクトリのみ,ファイルのみ,指定プレフィックスのファイルのみなど取得できます。
ディレクトリだけ抽出
var dirs = fsEntries.Where(path => File.GetAttributes(path).HasFlag(FileAttributes.Directory));
foreach, Parallel.ForEachなど夢が広がる。
なにより一時リストが生成されないのが嬉しい。
Conclusion
C#ってすばらしい(偏見)。