2013-06-24 8 views
1

나는 처리하려고하는 140 개의 디렉토리가 있습니다. 내 테스트에 따르면 139 개의 디렉토리가 내 파일 패턴 (* abc.txt)과 일치합니다.GetDirectories - 패턴과 일치하지 않는 디렉토리를 찾습니다.

사실은 * abc.txt가 없는지 확인하기 위해 1 개의 디렉토리를 찾으려고합니다.

어떻게하면됩니까?

var directoryCount = from subdirectory in Directory.GetDirectories(paramStartFilePath, "*", SearchOption.AllDirectories) 
        where Directory.GetDirectories(subdirectory).Length == 0 
        select subdirectory; 

나는 기반으로이 같은 패턴 파일을 수집하고 있습니다 : 다음 코드는 나에게 140 개 디렉토리 번호 제공

dirInfoFiles= new DirectoryInfo(startFilePath); 

IEnumerable<FileInfo> listFiles = dirInfoFiles.EnumerateFiles("*abc.txt, System.IO.SearchOption.AllDirectories); 

는 어떻게 하나의 디렉토리를 찾을 수 내 .txt 파일이 포함되어 있지 않습니까?

답변

1

당신은 이름이 "ABC"로 끝나는 적어도 하나의 TXT 파일이 포함되어 있지 않습니다 모든 디렉토리하려는 경우 :

IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles.EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories) 
    .Where(d => !d.EnumerateFiles().Any(f => f.Extension.ToUpper() == ".TXT" 
      && f.Name.EndsWith("abc", StringComparison.OrdinalIgnoreCase))); 

또는 다른 말로 같은, 어쩌면 더 읽기 :

IEnumerable<DirectoryInfo> matchingDirs = dirInfoFiles 
    .EnumerateDirectories("*.*", System.IO.SearchOption.AllDirectories) 
    .Where(d => !d.EnumerateFiles("*abc.txt").Any()); 
2

마을 접근 방식을 통해 항상 탱크가 작동합니다 : *.*을 열거하고 일치하지 않는 패턴을 제외하십시오.

0

내 걸릴 것입니다. 찾고있는 텍스트로 끝나고 대/소문자를 구분하지 않는 파일이 들어있는 첫 번째 항목 (또는 null)을 반환합니다. 람다를 제거하면 더 쉽게 읽을 수 있습니다.

var directory = Directory.GetDirectories((paramStartFilePath, "*", SearchOption.AllDirectories) 
        .FirstOrDefault(x => new DirectoryInfo(x).EnumerateFiles().Any(f => !f.Name.EndsWith("abc.txt",true,CultureInfo.CurrentCulture)));