我想使用递归在目录结构中找到所有excel文件.问题是,Directory.GetFiles中使用的搜索模式一次只允许一个扩展.
有没有人知道解决这个问题的方法,还是我必须多次通过目录来寻找特定的扩展?或者你可以只抓取每个文件,然后遍历该列表寻找特定的扩展名.无论哪种方式听起来都有点低效.
谢谢
在.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