与其将 Directory.GetFiles() 放入列表中,不如搜索所需的文件
本文关键字:搜索 文件 列表 Directory GetFiles | 更新日期: 2023-09-27 18:36:20
bool match = Regex.IsMatch(Path.GetFileName(Directory.GetFiles(string.Format(@"C:'apps'{0}'", app), "*.config").ToString()).ToLower(), "loggingconfiguration.config");
我一直在使用以下代码将配置放入列表中,然后遍历每个配置以查看它们是否与 "loggingconfiguration.config"
或 "*app*.config."
的文件名匹配 这没有问题,但我不确定这是否是处理这种情况的最佳方式。
List<string> configFiles = Directory.GetFiles(string.Format(@"C:'apps'{0}'", app), "*.config").ToList<string>();
foreach (var item in configFiles)
{
if (item.ToLower().Contains("loggingconfiguration.config") || (Path.GetFileName(item.ToLower()).Contains(app)))
{
//Do something
}
}
我想知道是否有办法通过先搜索"loggingconfiguration.config"
或"'*app*.config"
来减少循环列表的步骤。我在顶部的尝试导致 system.string[] 用于 'Path.GetFileName(Directory.GetFiles(string.Format(@"C:''apps{0}''", app), "*.config") 搜索。
假设你使用的是 .NET 4 或更高版本,你可以执行以下操作:
var files = new DirectoryInfo(string.Format(@"C:'apps'{0}'", app))
.EnumerateFiles("*.config")
.Where(x=>
x.Name.Equals("loggingconfiguration.config", StringComparison.OrdinalIgnoreCase) ||
x.Name.ToUpperInvariant().Contains("APP"));
否则使用GetFiles
:
var files = new DirectoryInfo(string.Format(@"C:'apps'{0}'", app))
.GetFiles("*.config")
.Where(x=>
x.Name.Equals("loggingconfiguration.config", StringComparison.OrdinalIgnoreCase) ||
x.Name.ToUpperInvariant().Contains("APP"));
EnumerateFiles
那里的信息
可以使用 LINQ 生成一个返回 IEnumerable 的查询,然后对其进行迭代。
var configFiles = Directory.GetFiles(string.Format(@"C:'apps'{0}'", app), "*.config")
.Where(p => p.ToLower().Contains("loggingconfiguration.config") || Path.GetFileName(p.ToLower()).Contains(app));
foreach (string s in configFiles)
{
//dowork
}
这会从源代码中隐藏一些筛选详细信息,但不一定性能更高。