Вы можете попробовать вложенный запрос:
- Перечислить главные каталоги в пределах
@"\\Computer1\"
- Перечислить файлы в этих верхних каталогах:
Код:
using System.IO;
using System.Linq;
...
var files = Directory
.EnumerateDirectories( @"\\Computer1\", "*", SearchOption.TopDirectoryOnly)
.SelectMany(dir => Directory
.EnumerateFiles(dir, "Application.exe", SearchOption.TopDirectoryOnly));
foreach (var file in files) {
...
}
Редактировать: Если вы хотите перечислить файлы 1-го и 2-гоУровни, вы можете вложить запрос еще раз :
var files = Directory
.EnumerateDirectories( @"\\Computer1\", "*", SearchOption.TopDirectoryOnly)
.SelectMany(dir => Directory
// 1st level
.EnumerateFiles(dir, "Application.exe", SearchOption.TopDirectoryOnly)
// 2nd level
.Concat(Directory
.EnumerateDirectories(dir, "*", SearchOption.TopDirectoryOnly)
.SelectMany(subdir => Directory.EnumerateFiles(subdir, "Application.exe", SearchOption.TopDirectoryOnly))));
В общий случай мы можем реализовать
private static IEnumerable<string> EnumerateDirectories(string root, int level) {
int current = 0;
Queue<string> agenda = new Queue<string>();
agenda.Enqueue(root);
while (current <= level) {
var list = agenda.ToList();
agenda.Clear();
foreach (var dir in list) {
if (current > 0)
yield return dir;
if (current < level)
foreach (var subdir in Directory.EnumerateDirectories(dir))
agenda.Enqueue(subdir);
}
current += 1;
}
}
Использовать его:
// All subdirectories, up and including 2nd level
var files = EnumerateDirectories(@"\\Computer1\", 2)
.SelectMany(dir => Directory
.EnumerateFiles(dir, "Application.exe", SearchOption.TopDirectoryOnly));
foreach (var file in files) {
...
}