C# 中的 Directory.GetFiles() 模式匹配
我使用 Directory.GetFiles()
根据给定模式列出文件。这对于我正在寻找的大多数模式(例如 zip、rar、sfv)都适用。
这就是我准备清单的方式(或多或少)。问题在于我想列出的数字 0.001 到 0.999 的模式。
alArrayPatternText.Add("*.zip");
alArrayPatternText.Add("*.sfv");
alArrayPatternText.Add("*.r??");
alArrayPatternText.Add("*.001");
for (int i = 2; i <= 999; i++)
{
string findNumber = String.Format("{0:000}", i);
alArrayPatternText.Add("*." + findNumber);
}
然后,我调用
string[] files = Directory.GetFiles(strDirName, varPattern);
数组中的每个模式,这样做似乎非常糟糕,因为列表有 1002 个条目,并且检查目录是否包含每个模式有点太耗时。
有更好的方法吗?
I'm using Directory.GetFiles()
to list files according to given pattern. This works fine for most of patterns I'm looking for (e.g. zip, rar, sfv).
This is how I prepare the list (more or less). The problem is with pattern of numbers .001 to .999 that I want to list.
alArrayPatternText.Add("*.zip");
alArrayPatternText.Add("*.sfv");
alArrayPatternText.Add("*.r??");
alArrayPatternText.Add("*.001");
for (int i = 2; i <= 999; i++)
{
string findNumber = String.Format("{0:000}", i);
alArrayPatternText.Add("*." + findNumber);
}
I then call
string[] files = Directory.GetFiles(strDirName, varPattern);
for each pattern in the Array which seems like very bad idea to do so since the list has 1002 entries and checking if directory has each of them is just a bit too time consuming.
Would there be a better way to do so ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您应该调用
Directory.EnumerateFiles("path", "*")
,然后使用 LINQ 通过调用Path.GetExtension
来过滤路径。例如:
You should call
Directory.EnumerateFiles("path", "*")
and then use LINQ to filter the paths by callingPath.GetExtension
.For example:
我的最终方法基于 SLAks 为任何寻找类似解决方案的人提供的答案
My final method based on SLaks answer for anyone looking for similar solution