public static IEnumerable<FileInfo> RecursiveFileSearch(this DirectoryInfo dir)
{
Queue<DirectoryInfo> q = new Queue<DirectoryInfo>();
q.Enqueue(dir);
while (q.Count > 0)
{
var directory = q.Dequeue();
foreach (var file in directory.GetFiles())
{
yield return file;
}
foreach (var d in directory.GetDirectories())
{
q.Enqueue(d);
}
}
}