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