C# 您可以搜索所需的文件,而不是将Directory.GetFiles()放入列表中吗?

C# 您可以搜索所需的文件,而不是将Directory.GetFiles()放入列表中吗?,c#,regex,C#,Regex,我一直在使用下面的代码将配置放在一个列表中,然后循环遍历每个配置,查看它们是否与“loggingconfiguration.config”或“*app*.config”的文件名匹配。这样做没有问题,但我不确定这是否是处理该场景的最佳方式 bool match = Regex.IsMatch(Path.GetFileName(Directory.GetFiles(string.Format(@"C:\apps\{0}\", app), "*.config").ToString()).ToLower

我一直在使用下面的代码将配置放在一个列表中,然后循环遍历每个配置,查看它们是否与
“loggingconfiguration.config”
“*app*.config”的文件名匹配。
这样做没有问题,但我不确定这是否是处理该场景的最佳方式

bool match = Regex.IsMatch(Path.GetFileName(Directory.GetFiles(string.Format(@"C:\apps\{0}\", app), "*.config").ToString()).ToLower(), "loggingconfiguration.config");
List configFiles=Directory.GetFiles(string.Format(@“C:\apps\{0}\”,app),“*.config”).ToList();
foreach(配置文件中的var项)
{
if(item.ToLower().Contains(“loggingconfiguration.config”)| |(Path.GetFileName(item.ToLower()).Contains(app)))
{
//做点什么
}
}

我想知道是否有一种方法可以通过首先搜索
“loggingconfiguration.config”
“\*app*.config”
来省去在列表中循环的步骤。我在顶部的尝试将导致system.string[]用于“Path.GetFileName”(Directory.GetFiles(string.Format(@“C:\apps{0}\”,app),“*.config”)搜索。

您可以使用LINQ构建一个查询,返回IEnumerable,然后对其进行迭代

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
    }
}

这会从源代码中隐藏一些过滤细节,但不一定会更有效。

假设您使用的是.NET 4或更高版本,您可以执行以下操作:

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
}
否则使用
GetFiles

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"));

EnumerateFiles
info

您可以使用LINQ one liner,但它仍然会在内部循环。最后,我使用了第一个查询的一个细微变化来检索配置文件名。
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"));