给出了如下文件的列表:
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任何帮助都将不胜感激。
发布于 2013-07-29 18:24:23
以戴维希的回答为基础。
使用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)));
}发布于 2013-07-29 17:59:41
Directory.EnumerateFiles似乎只适用于简单的通配符。然而,根据这个问题/答案(How to find files according RegEx in C#)。您可以使用LINQ和regex匹配来进行筛选吗?
发布于 2013-07-29 18:00:33
将其与LINQ相结合:
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Skip(2).Take(3);
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Where(...);https://stackoverflow.com/questions/17930868
复制相似问题