gpt4 book ai didi

c# - C# 中的 Directory.GetFiles() 模式匹配

转载 作者:太空狗 更新时间:2023-10-29 23:18:38 24 4
gpt4 key购买 nike

我正在使用 Directory.GetFiles() 根据给定模式列出文件。这适用于我正在寻找的大多数模式(例如 zip、rar、sfv)。

这就是我准备列表的方式(或多或少)。问题在于我要列出的数字 .001 到 .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 个条目,并且检查目录是否包含每个条目有点太耗时了。

有更好的方法吗?

最佳答案

您应该调用 Directory.EnumerateFiles("path", "*"),然后使用 LINQ 通过调用 Path.GetExtension 来过滤路径。

例如:

var extensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase) {
".zip", ".sfv"
};
extensions.UnionWith(Enumerable.Range(1, 998).Select(i => i.ToString(".000")));
var files = Directory.EnumerateFiles("path", "*")
.Where(p => extensions.Contains(Path.GetExtension(p))
|| Path.GetExtension(p).StartsWith(".r", StringComparison.OrdinalIgnoreCase));

关于c# - C# 中的 Directory.GetFiles() 模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4423429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com