2015-01-30 4 views
0

디렉토리 트리에서 첫 번째 .dcm을 찾고 첫 번째 전체 경로 (a/a/a/123.dcm)를 얻으려고합니다. 그러나 ie .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.dcma/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

기준은 ie로 끝납니다 : .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

그냥'EnumerateFiles'를'GetFiles'로 변경하십시오 – paul

+0

답변을 구하십시오 ... 첫 번째 파일 디렉토리도 아닌가? – user3276191

관련 문제