個人的には、再帰を避けるのは難しいと感じています。ファイル システムがインデックス化されていないためです。Google デスクトップまたは Microsoft デスクトップ サーチは、すべてのファイルのインデックスを作成しました。クエリを実行すると、非常に迅速に回答が得られます。
選択肢は、.net フレームワークが再帰を行うか、自分で行うかです。
他のオプションはLinqです - これは.netフレームワークが再帰を行うと思います。しかし、それはよりきれいになります
リンク
http://msdn.microsoft.com/en-us/library/bb882649.aspx
// Take a snapshot of the file system.
System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(startFolder);
// This method assumes that the application has discovery permissions
// for all folders under the specified path.
IEnumerable<System.IO.FileInfo> fileList = dir.GetFiles("*.*", System.IO.SearchOption.AllDirectories);
string searchTerm = @"Visual Studio";
// Search the contents of each file.
// A regular expression created with the RegEx class
// could be used instead of the Contains method.
// queryMatchingFiles is an IEnumerable<string>.
var queryMatchingFiles =
from file in fileList
where file.Extension == ".htm"
let fileText = GetFileText(file.FullName)
where fileText.Contains(searchTerm)
select file.FullName;
// Execute the query.
Console.WriteLine("The term \"{0}\" was found in:", searchTerm);
foreach (string filename in queryMatchingFiles)
{
Console.WriteLine(filename);
}
.net コード
foreach (FileInfo fi in directory.GetFiles())
{
// Console.WriteLine(@"Found file: [{0}] in directory: [{1}]", fi.Name, directory.FullName);
}
foreach (DirectoryInfo diSourceSubDir in directory.GetDirectories())
{
// Console.WriteLine(@"Sub Folder {0} found.", diSourceSubDir.FullName);
}