2012-06-09 4 views
5

그래서 나는이 루틴이 있습니다파일 생성 날짜별로 디렉토리 목록을 정렬 (및 나열) 하시겠습니까?

public static IEnumerable<string> GetFiles(string path, string[] searchPatterns, SearchOption searchOption = SearchOption.TopDirectoryOnly) { 
    return searchPatterns.AsParallel() 
         .SelectMany(searchPattern => 
          Directory.EnumerateFiles(path, searchPattern, searchOption)) 
         .OrderBy<string, string>((f) => f) 
         .Distinct<string>(); 
} 

과 그 작동하지만 그 이름으로 파일을 주문하고 나는 그것의 생성 날짜에 의해 반환 된 파일을 주문해야합니다. 항목이 루틴과 같은 문자열 인 경우 어떻게 정렬 할 수 있습니까? 열거 형 원인 파일을 사용하려면 1k 이상이 될 것으로 예상됩니다.

감사합니다.

+1

질문을 단순화하거나 집중하십시오. '열거'또는 '주문'에 대한 질문입니까? –

+0

@pst 생성 날짜순으로 정렬 된 파일을 열거하십시오. –

답변

12

정말 그 쿼리에 대해 작업 병렬 라이브러리를 사용하고 싶지 않습니다. 어떤 이유로이 질문이 How to find all exe files on disk using C#?을 참조하십시오.

작성 날짜로 파일을 열거하는 경우 제공된 경로를 사용하여 DirectoryInfo을 새로 작성하여 함수를 시작한 다음 .EnumerateFiles(string pattern, SearchOption searchOption)을 호출하여 패턴과 일치하는 모든 파일을 가져옵니다. 마지막으로, 당신은 반환 된 열거의 FileInfo 객체의 CreationTime 속성으로 주문할 수 있습니다 다음 중과 같이, 그들의 Name을 전체에서는 FileInfo 개체를 반환하거나 :

public static IEnumerable<string> GetFiles(string path, string[] searchPatterns, SearchOption searchOption = SearchOption.TopDirectoryOnly) { 
    DirectoryInfo dir = new DirectoryInfo(path); 
    var dirs = (from file in dir.EnumerateFiles(searchPatterns, searchOptions) 
      orderby file.CreationTime ascending 
      select file.Name).Distinct(); // Don't need <string> here, since it's implied 
    return dirs; 
} 

참고 : 나는이 액세스 할 수없는 현재 컴파일러지만 위의 코드는 오류가 없다고 생각합니다.

+0

'using System.Linq;를 포함해야합니다. – chorbs

2

DirectoryInfo.EnumerateFiles으로 전환해야합니다. 그러면 FileInfo 인스턴스 컬렉션이 반환됩니다. 그런 다음 날짜순으로 정렬하고 이름을 선택할 수 있습니다.

관련 문제