如何使用具有特定子目录的通配符扫描目录

时间:2012-12-11 07:30:13

标签: c# search directory wildcard

我想知道扫描一个你不确定的字符的目录会有什么好办法。

例如,我想扫描

  

C:\程序\版本2 * \文件

含义

  • 该文件夹位于C:\Program
  • Version2.*可以是Version2.33Version2.1等等。
  • 该文件夹中有一个名为Files的文件夹

我知道我可以做foreach (directory) if contains("Version2.")之类的事情,但我想知道是否有更好的方法。

2 个答案:

答案 0 :(得分:7)

Directory.EnumerateDirectories 接受搜索模式。所以枚举具有通配符的父级,而不是枚举其余的:

  var directories = 
    Directory.EnumerateDirectories(@"C:\Program\", "Version2.*")
     .SelectMany(parent => Directory.EnumerateDirectories(parent,"Files"))

注意:如果路径可以包含任何级别的通配符 - 只需将路径标准化并按“\”拆分,而不是逐级收集文件夹。

答案 1 :(得分:1)

试试这个

var pattern = new Regex(@"C:\\Program\\Version 2(.*)\\Files(.*)");

var directories = Directory.EnumerateDirectories(@"C:\Program", "*", 
                                                 SearchOption.AllDirectories)
                                                .Where(d => pattern.IsMatch(d));