2017-12-09 2 views
0

그 안에 파일이있는 모든 폴더 경로를 가져 오려고하지만 그 안에 다른 폴더가있는 폴더 경로는 제외하려고합니다. 나는 사용하고있다C# 다른 폴더 만있는 폴더를 제외하고 모든 폴더 및 하위 폴더의 경로 가져 오기

Directory.GetDirectories(dirPath, "*", SearchOption.AllDirectories); 

내가 필요한 것은 무엇입니까? 단, 다른 폴더가있는 폴더의 경로 만 반환한다는 점만 다릅니다. 이 작업을 수행하는

+0

가능한 복제 (https://stackoverflow.com/questions/31605196/fast-io :하지만이 위의 방법보다 훨씬 느린 것으로 밝혀졌다 -to-check-if-directory-contains-files) –

답변

0

한 가지 방법은 디렉토리 EnumerateFiles하는 것 모두는 하위 디렉토리를, 그리고 자신의 디렉토리 이름의 Distinct() 목록을 얻을 :

List<string> directoriesWithFiles = Directory 
    .EnumerateFiles(rootDir, "*", SearchOption.AllDirectories) 
    .Select(Path.GetDirectoryName) 
    .Distinct() 
    .ToList(); 

내가 생각 첫 번째 방법 이것은 EnumerateDirectories을 사용하고 각 디렉토리에 대해 파일을 포함하지 않는 디렉토리를 필터링하기 위해 EnumerateFiles을 사용합니다.

List<string> directoriesWithFiles = Directory 
    .EnumerateDirectories(rootDir, "*", SearchOption.AllDirectories) 
    .Where(d => Directory.EnumerateFiles(d).Any()) 
    .ToList(); 
[디렉토리에 파일이 포함 된 경우 빠른 I/O를 확인하는]의