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

标签 c# regex

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 信息 there

关于c# - 您可以搜索所需的文件,而不是将 Directory.GetFiles() 放入列表中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19501712/

相关文章:

javascript - 按组件解释密码正则表达式组件(javascript)

regex - 在 vim 中自动检测 python 3 文件

python - 通过分隔符计数和位置从数据框中提取特定文本

regex - 使用 sed 打印以 z 开头且不以 03 结尾的行

c# - ASP.Net 从 ActionLink 打开模式

c# - Winforms 选项卡页面上的关闭按钮

c# - asp.net mvc 在哪里放置结构

regex - IIS 重写规则 - 忽略 localhost

c# - ASP .NET Button 事件处理程序不会在第一次单击时触发,而是在 PostBack 后的第二次单击时触发

java - 从 C# 关闭 java 进程(在 Windows 上)