给出这样的文件列表:
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
任何帮助都将不胜感激。
答案 0 :(得分:1)
Directory.EnumerateFiles似乎只适用于简单的通配符。但是,根据这个问题/答案(How to find files according RegEx in C#)。您可以使用LINQ和正则表达式匹配来进行过滤吗?
答案 1 :(得分:1)
将它与LINQ结合使用:
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Skip(2).Take(3);
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Where(...);
答案 2 :(得分:1)
以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)));
}