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.*"))

我怎么能做到这一点而不进入文件循环。

4

3 回答 3

2

如果重载提供的搜索模式Directory.GetDirectory不足以满足您的需求,您可以使用自定义方法。

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
}

您可能希望将foreach循环包围在一个try/catch块中。

于 2013-01-04T04:45:06.387 回答
1

您可以使用接受搜索模式的System.IO.Directory.GetDirectories 重载。

例如:

string[] dirs = Directory.GetDirectories(@"c:\", "c*");
于 2013-01-04T04:40:07.167 回答
0

您的问题非常令人困惑,但是您想获取与 Regex 模式匹配的目录吗?

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

}
于 2013-01-04T04:46:21.250 回答