최상위 디렉터리에서 특정 정규식과 일치하는 폴더 목록을 가져 오는 가장 효율적인 방법은 무엇입니까? 현재 재귀 적으로 하위 폴더를 반복하여 정규식과 일치하는지 확인한 다음 디렉토리 경로를 사용하여 파일 이름을 가져옵니다.C 정규식을 사용하여 샤프 폴더 검색
현재이 디렉토리에있는 폴더의 양 때문에 현재 검색 방법을 사용하면 약 50 분이 걸립니다.
private void ProcessFiles(string path, string searchPattern)
{
string pattern = @"^(\\\\server\\folder1\\subfolder\\(MENS|WOMENS|MENS\sDROPBOX|WOMENS\sDROPBOX)\\((((COLOR\sCHIPS)|(ALL\sMENS\sCOLORS)))|((\d{4})\\(\w+)\\(FINAL\sART|FINAL\sARTWORK)\\(\d{3}))))$";
DirectoryInfo di = new DirectoryInfo(path);
try
{
Debug.WriteLine("I'm in " + di.FullName);
if (di.Exists)
{
DirectoryInfo[] dirs = di.GetDirectories("*", SearchOption.TopDirectoryOnly);
foreach (DirectoryInfo d in dirs)
{
string[] splitPath = d.FullName.Split('\\');
var dirMatch = new Regex(pattern, RegexOptions.IgnoreCase);
if (dirMatch.IsMatch(d.FullName))
{
Debug.WriteLine("---Processing Directory: " + d.FullName + " ---");
FileInfo[] files = d.GetFiles(searchPattern, SearchOption.TopDirectoryOnly);
AddColor(files, splitPath);
}
ProcessFiles(d.FullName, searchPattern);
}
}
}
catch (Exception e)
{
}
}
50 분은 잘못된 것을 의미합니다. 코드를 게시하십시오. – Jon
또는 : 50 분은 그가 디렉토리를 많이 가지고 있다는 것을 의미합니다. 또는 포함 된 디렉토리는 매핑 된 UNC 경로 나 USB 스틱, DVD 드라이브 등과 같은 느린 장치에 있습니다. – Abel
@Abel : 그 중 UNC 시나리오는 그럴듯한 기회. 그러나 어떤 경우이든, 코드를 살펴 보는 것이이 "디버깅"을위한 합리적인 첫 단계입니다. – Jon