从Directory.GetFiles中排除结果
如果我想调用Directory.GetFiles并让它返回与模式*.bin
匹配的所有文件,但我想排除所有与模式LOG#.bin
匹配的文件,其中#
是不确定长度的运行计数器。 有没有办法在将搜索filter传递给GetFiles
的步骤中过滤掉结果,或者我必须获取结果数组然后删除我要排除的项目?
您可以使用Linq, Directory.EnumerateFiles()
和Where()
filter – 这样您只能得到所需的文件,其余的被过滤掉。
像这样的东西应该工作:
Regex re = new Regex(@"^LOG\d+.bin$"); var logFiles = Directory.EnumerateFiles(somePath, "*.bin") .Where(f => !re.IsMatch(Path.GetFileName(f))) .ToList();
正如指出Directory.EnumerateFiles
需要.NET 4.0。 另外一个更清晰的解决方案(以更多的开销为代价)使用DirectoryInfo
/ EnumerateFiles()
,它返回IEnumerable
因此您可以直接访问文件名和扩展名而无需进一步解析。
使用Linq有一个解决方案:
using System; using System.IO; using System.Linq; namespace getfilesFilter { class Program { static void Main(string[] args) { var files = Directory.GetFiles(@"C:\temp", "*.bin").Select(p => Path.GetFileName(p)).Where(p => p.StartsWith("LOG")); foreach (var file in files) { Console.WriteLine(file); } Console.ReadLine(); } } }