从Directory.GetFiles中排除结果

Sco*_*ain 4 .net c#

如果我想调用Directory.GetFiles并让它返回所有匹配模式的文件,*.bin但我想排除所有匹配模式的文件,LOG#.bin其中#是一个不确定长度的运行计数器.有没有办法在传入搜索过滤器的步骤中过滤掉结果,GetFiles或者我必须获取结果数组然后删除我要排除的项目?

Bro*_*ass 8

你可以使用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>所以你可以直接访问文件名和扩展名而无需进一步解析.