如果我想调用Directory.GetFiles并让它返回所有匹配模式的文件,*.bin但我想排除所有匹配模式的文件,LOG#.bin其中#是一个不确定长度的运行计数器.有没有办法在传入搜索过滤器的步骤中过滤掉结果,GetFiles或者我必须获取结果数组然后删除我要排除的项目?
你可以使用Linq Directory.EnumerateFiles()和一个Where()过滤器 - 这样你只能得到你想要的文件,剩下的就过滤掉了.
这样的事情应该有效:
Regex re = new Regex(@"^LOG\d+.bin$");
var logFiles = Directory.EnumerateFiles(somePath, "*.bin")
.Where(f => !re.IsMatch(Path.GetFileName(f)))
.ToList();
Run Code Online (Sandbox Code Playgroud)
正如所指出的那样Directory.EnumerateFiles需要.NET 4.0.另外一个更清洁的解决方案(以更多的开销为代价)是使用 DirectoryInfo/ EnumerateFiles()返回一个,IEnumerable<FileInfo>所以你可以直接访问文件名和扩展名而无需进一步解析.