C#使用Directory.GetFiles和搜索模式递归目录

Dar*_*ung 3 c# recursion

我想使用递归在目录结构中找到所有excel文件.问题是,Directory.GetFiles中使用的搜索模式一次只允许一个扩展.

有没有人知道解决这个问题的方法,还是我必须多次通过目录来寻找特定的扩展?或者你可以只抓取每个文件,然后遍历该列表寻找特定的扩展名.无论哪种方式听起来都有点低效.

谢谢

seh*_*ehe 5

在.NET中,每个版本都有SearchOption.TopDirectoryOnly和SearchOption.AllDirectories

在.NET 4中,您可以非常高效地执行以下操作:

        var regex = new Regex(@"\d+", RegexOptions.Compiled);

        var files = new DirectoryInfo(topdir)

            .EnumerateFiles("*.*", SearchOption.AllDirectories)

            .Where(fi => regex.IsMatch(fi.Name));
Run Code Online (Sandbox Code Playgroud)

(此示例过滤名称中包含两位数的文件)

要模拟这个,写一个递归的枚举器方法(yield return)来返回所有文件,并像这样过滤结果:

 IEnumerable<FileInfo> Recurse(string topdir)
 { 
      // for each GetFiles() array element
      //      if is_not_dir yield return
      //      else Recurse(subdir)          
 }

 var filtered = Recurse.Where(fi => regex.IsMatch(fi.Name));
Run Code Online (Sandbox Code Playgroud)

HTH