Eu uso este trecho de código para reunir caminhos fora do disco rígido. O mesmo padrão funciona para muitas outras travessias de árvore.
public static IEnumerable<string> Files(
this string root, Func<string, bool> accept)
{
return
Directory.GetFiles(root).Where(accept)
.Concat(
Directory.GetDirectories(root)
.SelectMany(d => d.Files(accept)));
}
Como extensão, funciona assim:
@"Sumblime 2Packages".Files(
s => s.EndsWith("tmLanguage");
Felicidades