2016-11-21 23 views
-1

所需的搜索描述:是searchPattern为Directory.GetDirectories在C#

Any string that contains either v2 or v3 (case insensitive) 

我试图找到使用Directory.GetDirectories(路径,是searchPattern)子目录路径,我要供应是searchPattern参数的正则表达式模式,但显然,searchPattern不能是正则表达式。

是否有其他好方法来过滤包含v2或v3的文件名?

回答

1

Directory.GetDirectories不支持正则表达式,所以你不能使用它。如果你想使用正则表达式,并避免扫描目录多次(削减必要的IO操作的量),你可以做到这一点的名单

foreach (string dir in Directory.GetDirectories(baseDir, "*v2*") 
         .Concat(Directory.GetDirectories(baseDir, "*v3*")) 
     ) 
{ 
} 
+0

那岂不是会更有效调用'Directory.GetDirectories(基本目录)。凡(d => Regex.IsMatch(d, “v [23]”))'所以你不枚举目录内容两次? –

+0

取决于目录的数量。如果它是成千上万的,而且只有两个目录需要检索,这个效率也是一样的。 –

+0

您的答案会过滤大写和小写吗?它似乎只会过滤小写文件 – djskj189

2

我反而使用:

var baseDir = "C:\\YourDirectory\\"; 
// Replace with your own Regex. 
var dirNames = new Regex("v2|v3", RegexOptions.Compiled | RegexOptions.IgnoreCase); 
var dirsFiltered = 
    Directory.EnumerateDirectories(baseDir).Where(dir => dirNames.IsMatch(dir)).ToArray(); 
相关问题