2013-01-04 6 views
1

디렉토리의 특정 폴더를 검색해야합니다.디렉토리의 특정 폴더 만 검색하십시오.

파일을 찾고 싶지 않아 파일을 검색 할 필요가 없습니다.

나는 디렉토리에 특정 폴더를 검색 할 수 있습니다하지만 난이 내가 단지 특정 폴더를 검색해야

foreach (FileInfo f in dir.EnumerateFiles()) 
{ 
     //code 
} 
foreach (DirectoryInfo d in dir.EnumerateDirectories()) 
{ 
    Call function recursively 
} 

같은 파일의 루프 이동합니다. 왜냐하면 나는 약 20,000 개 정도의 파일을 가지고 있기 때문에 루프보다 코드를 사용하면 모든 파일이 이동하고 더 많은 시간이 걸린다.

는하지만 난 단지

Regex.IsMatch(dir.FullName, @"1293.*T.*")) 

같은 일부 폴더가 필요합니다 내가 할 수있는 방법이 파일 루프 거치지 않고.

+0

임 확실하지 (dir.EnumerateDirectories에서의 DirectoryInfo d 개를()) { 통화 기능을 반복적으로 }' – Jastill

답변

2

, 당신은 사용자 정의 방법을 사용할 수 있습니다.

static string SearchDirectory(string path, string pattern) 
{ 
    var regex = new Regex(pattern); 
    foreach (var d in Directory.GetDirectories(path)) 
    { 
     var dirName = d.Substring(d.LastIndexOf('\\') + 1); 
     if (regex.IsMatch(dirName)) return d; 
     SearchDirectory(d, pattern); 
    } 
    return null; 
    //Or throw an Exception 
} 

당신은 try/catch 블록의 foreach 루프를 포위 할 수 있습니다.

1

검색 패턴을 허용하는 System.IO.Directory.GetDirectories overload을 사용할 수 있습니다. 예를 들어

: Directory.GetDirectory의 과부하가 제공하는 검색 패턴은 사용자의 요구에 충분하지 강하면

string[] dirs = Directory.GetDirectories(@"c:\", "c*"); 
+0

I dir.EnumerateDirectories ("1293 * T *") ...를 사용했습니다. –

0

귀하의 질문은 매우 혼란 스럽지만 Regex 패턴과 일치하는 디렉토리를 가져 오시겠습니까? 당신은, 그러나 그것의 소리에 의해 원하는, 당신은 단지`foreach는 실행해야합니다 어떤

foreach (DirectoryInfo d in dir.EnumerateDirectories().Where(d => Regex.IsMatch(dir.FullName, @"1293.*T.*"))) 
{ 

} 
관련 문제