首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Directory.EnumerateFiles:如何将范围或列表指定为searchPattern

Directory.EnumerateFiles:如何将范围或列表指定为searchPattern
EN

Stack Overflow用户
提问于 2013-07-29 17:54:14
回答 3查看 1.4K关注 0票数 0

给出了如下文件的列表:

代码语言:javascript
复制
file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_5.txt
file_6.txt

如何调用Directory.EnumerateFiles()来获取范围或文件列表?例如

代码语言:javascript
复制
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt", SearchOption.TopDirectoryOnly)

会把上面所有的六个文件都还回去,到目前为止还不错。但是,如果我想获得一个范围(即从file_3.txtfile_5.txt)或列表(即file_1.txtfile_4.txtfile_6.txt),该怎么办?

我要找的是这样的东西(下面的代码不起作用.它只是给你一个想法):

代码语言:javascript
复制
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_{3-5}.txt", SearchOption.TopDirectoryOnly)

获取一系列文件

代码语言:javascript
复制
file_3.txt
file_4.txt
file_5.txt

..。然后

代码语言:javascript
复制
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_{1,4,6}.txt", SearchOption.TopDirectoryOnly)

获取文件的确切列表

代码语言:javascript
复制
file_1.txt
file_4.txt
file_6.txt

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-29 18:24:23

以戴维希的回答为基础。

使用LINQ和System.Text.Regular表达式获取文件列表:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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);

对于文件号列表,您可以这样做:

代码语言:javascript
复制
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)));
}

Resource

票数 1
EN

Stack Overflow用户

发布于 2013-07-29 17:59:41

Directory.EnumerateFiles似乎只适用于简单的通配符。然而,根据这个问题/答案(How to find files according RegEx in C#)。您可以使用LINQ和regex匹配来进行筛选吗?

票数 1
EN

Stack Overflow用户

发布于 2013-07-29 18:00:33

将其与LINQ相结合:

代码语言:javascript
复制
Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Skip(2).Take(3);

Directory.EnumerateFiles(Directory.GetCurrentDirectory(), "file_*.txt").Where(...);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17930868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档