2013-10-21 22 views
2
bool match = Regex.IsMatch(Path.GetFileName(Directory.GetFiles(string.Format(@"C:\apps\{0}\", app), "*.config").ToString()).ToLower(), "loggingconfiguration.config"); 

我一直在使用下面的代碼到CONFIGS放入一個列表,然後通過他們每個人的循環,看看他們的"loggingconfiguration.config""*app*.config."這工作不會有問題的文件名匹配,但我不知道這是處理這種情況的最佳方式。而不是將Directory.GetFiles()放入列表中,您可以搜索您需要的文件嗎?

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"先切出通過列表循環的步驟的方法。我試圖在`Path.GetFileName(Directory.GetFiles(string.Format(@「C:\ apps {0} \ app),」* .config「)搜索的system.string []中得到最高結果。

+1

您可以使用LINQ的一行,但它仍然環路內部 – Jonesopolis

回答

1

假設你使用.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

+0

我結束了使用第一次查詢的細微變化來檢索配置文件名稱。 – Pam

1

您可以使用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 
} 

這隱藏了一些從源代碼過濾細節,但並不一定是更好的性能。

相關問題