2015-01-30 2 views
0

Я пытаюсь найти первый .dcm в дереве каталогов, а затем получить первый полный путь (a/a/a/123.dcm). Однако игнорирование каталогов, где т. Д. Не найдено.Найти первый файл в ветвящемся каталоге

пример:

a/a/a/123.dcm 
a/a/a/1234.dcm 
a/a/a/12345.dcm 

a/a/b/23.dcm 
a/a/b/234.dcm 
a/a/b/2345.dcm 

a/a/c/23.dcm 
a/a/c/234.dcm 
a/a/c/2345.dcm 

Ответ должен быть: a/a/a/123.dcm, a/a/b/23.dcm и a/a/c/23.dcm

Я пробовал:

var files = Directory.GetFiles(inputDir, "*.*", SearchOption.AllDirectories) 
         .Where(s => s.EndsWith(".dcm")).ToArray(); 
var dir = Directory.GetDirectories(inputDir, "*.*", SearchOption.AllDirectories).ToArray(); 

var biggest = files.First(); 

foreach (var item in dir) 
{ 
    DirectoryInfo di = new DirectoryInfo(item); 
    var q = from i in di.GetFiles("*.dcm", SearchOption.AllDirectories) 
      select i.Name; 
    var qq = q.First(); 

    foreach (var items in qq) 
    { 
     Console.WriteLine(items); 
    } 
} 

Однако то, что я получаю ответ на пять каталогов. Ответ:

a/a/a/123.dcm 
a/a/a/123.dcm 
a/a/a/123.dcm 
a/a/b/23.dcm 
a/a/c/23.dcm 

Мне просто интересно, есть ли более простой способ сделать это, используя LINQ или что-то еще? Большое вам спасибо за вашу помощь. Приветствия.

+0

ли вы имеете в виду «первый» после сортировки был применен? Если да, то каков критерий сортировки? –

+0

Критерии заканчиваются на: .dcm – user3276191

ответ

0

Вот версия LINQ:

 var inputDir = @"c:\\temp"; 

     var files = Directory 
      .EnumerateFiles(inputDir, "*.dcm", SearchOption.AllDirectories) 
      .Select(f => new FileInfo(f)) 
      .GroupBy(f => f.Directory.FullName, d => d, (d, f) => new { Directory = d, FirstFile = f.ToList().First() }) 
      .ToList(); 

     files.ForEach(f => Console.WriteLine("{0} {1}", f.Directory, f.FirstFile)); 
+0

забыли сказать, что я на 3.5 нет directory.enumeratefiles – user3276191

+0

Для 3.5 просто измените 'EnumerateFiles' на' GetFiles' – paul

+0

CHeers для ответа ... Что делать, если мне нужен только первый файл а не каталог тоже? – user3276191

 Смежные вопросы

  • Нет связанных вопросов^_^