從頂級目錄中獲取與特定正則表達式匹配的文件夾列表的最有效方法是什麼?我目前只是遞歸迭代子文件夾,看它們是否匹配正則表達式,然後如果他們這樣做,我抓住文件名與目錄路徑。C Sharp使用正則表達式搜索文件夾
由於目錄中的文件夾數量衆多,目前此搜索使用當前方法大約需要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 2011-03-10 14:41:50
或者:50分鐘意味着他有很多目錄,或者包含的目錄位於映射的UNC路徑或其他慢速設備(如USB棒,DVD驅動器等)上。 – Abel 2011-03-10 14:43:35
@Abel:其中,我只提供UNC場景a似是而非的機會。但無論如何,查看代碼是「調試」這個合理的第一步。 – Jon 2011-03-10 14:47:09