我在用着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 个条目,并且检查目录是否包含每个条目有点太耗时。
有更好的方法吗?
你应该打电话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));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)