Directory.EnumerateFiles:如何将范围或列表指定为searchPattern
本文关键字:列表 searchPattern 范围 EnumerateFiles Directory | 更新日期: 2023-09-27 18:25:19
给定如下文件列表:
file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_5.txt
file_6.txt
如何调用Directory.EnumerateFiles()
来获取文件的范围或列表?例如
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt", SearchOption.TopDirectoryOnly)
会返回上面的所有六个文件,到目前为止还不错。但是,如果我想获得一个范围(即从file_3.txt
到file_5.txt
)或一个列表(即file_1.txt
、file_4.txt
和file_6.txt
),该怎么办?
我想要的是这样的东西(下面的代码不起作用……它只是给你一个想法):
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_{3-5}.txt", SearchOption.TopDirectoryOnly)
获取一系列文件
file_3.txt
file_4.txt
file_5.txt
然后
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_{1,4,6}.txt", SearchOption.TopDirectoryOnly)
获取文件的确切列表
file_1.txt
file_4.txt
file_6.txt
如有任何帮助,我们将不胜感激。
建立在DavidH的答案之上。
使用LINQ和System.Text.Regular表达式获取文件列表:
IEnumerable<string> files1to3 = Directory.EnumerateFiles(@"C:'", "File*.txt", SearchOption.TopDirectoryOnly).Where(f => Regex.IsMatch(f, "File[1-3].txt"));
IEnumerable<string> files4to6 = Directory.EnumerateFiles(@"C:'", "File*.txt", SearchOption.TopDirectoryOnly).Where(f => Regex.IsMatch(f, "File[4,5,6].txt"));
响应@j3d:
IEnumerable<string> files150to200 = Directory.EnumerateFiles(@"C:'", "File*.txt", SearchOption.TopDirectoryOnly).Where(f => Convert.ToInt32(Regex.Match(f, @"'d+").Value) >= 150 && Convert.ToInt32(Regex.Match(f, @"'d+").Value) <= 200);
对于文件号列表,你可以这样做:
System.Collections.ArrayList searchArrayList = new System.Collections.ArrayList();
searchArrayList.Add(new int[] { 1, 125, 1554 });
foreach (int[] i in searchArrayList) {
IEnumerable<string> findFiles = Directory.EnumerateFiles(@"c:'", "File*.txt", SearchOption.TopDirectoryOnly).Where(f => i.Contains(Convert.ToInt32(Regex.Match(f, @"'d+").Value)));
}
资源
Directory.EnumerateFiles似乎只能使用简单的通配符。然而,根据这个问题/答案(如何在C#中根据RegEx查找文件)。您可以使用LINQ和正则表达式匹配来进行过滤吗?
将其与LINQ:结合使用
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Skip(2).Take(3);
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Where(...);