与其将 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") 搜索。

与其将 Directory.GetFiles() 放入列表中,不如搜索所需的文件

假设你使用的是 .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
}

这会从源代码中隐藏一些筛选详细信息,但不一定性能更高。