2015-09-28 127 views
0

這是我的問題。我正在從目錄中獲取文件列表。文件名具有特定的命名約定,它們具有國家2字符前綴,然後是通用名稱。我想根據通用名稱獲取文件,以便可以檢索所有國家/地區特定的文件。目前我正在對國家前綴進行硬編碼。 代碼如下通配符模式匹配目錄中的文件

string[] filePath = Directory.GetFiles(ConfigurationManager.AppSettings["InputFiles"]); 

foreach (string inputfilepath in filePath) 
{ 
    try 
    { 
     if ((inputfilepath.ToUpper().Contains("IN_CCMS_CARDO_") || 
      (inputfilepath.ToUpper().Contains("MY_CCMS_CARDO_")) || 
      (inputfilepath.ToUpper().Contains("HK_CCMS_CARDO_")) || 
      (inputfilepath.ToUpper().Contains("TW_CCMS_CARDO_")) || 
      (inputfilepath.ToUpper().Contains("SG_CCMS_CARDO_")) || 
      (inputfilepath.ToUpper().Contains("ID_CCMS_CARDO_")) || 
      (inputfilepath.ToUpper().Contains("PH_CCMS_CARDO_")) || 
      (inputfilepath.ToUpper().Contains("TH_CCMS_CARDO_")))) 
     { 
      // Do something here 
     } 

我想要的東西,如* _CCMS_CARDO這將獲得具有CCMS_CARDO在其名稱中的所有文件替換SG_CCMS_CARO。

任何幫助將不勝感激。 謝謝

感謝您的答案。但還有一個問題。我得到了一個具有類似名稱的文件列表,如__ CCMS_CARDO,__ CCMS_CAMP,__ CCMS_RPC。我想要在Contains方法中匹配通配符模式,因爲我正在爲每個文件(?? _ CCMS_CARD等)做一些事情,並且由於這在多個地方使用,所以我不想做太多的改變。我真正想要的是用包含(「?? _ CCMS_CARDO_」)的東西替換多個nputfilepath.ToUpper()。包含(「ID_CCMS_CARDO_」)),這將包含CCMS_CARDO.Thanks

+0

檢查的這個.. https://msdn.microsoft.com/en-us/library/wz42302f(v=vs.110).aspx –

+1

可能重複[如何搜索對於使用通配符的文件列表](http://stackoverflow.com/questions/1584711/how-do-i-search-for-a-list-of-files-using-wildcard) –

+0

感謝您的答案。但還有一個問題可能是我沒有正確解釋。 – user3694237

回答

3
Directory.GetFiles("\\PATH_HERE", "*_CCMS_CARDO", SearchOption.TopDirectoryOnly); 
0

使用'?'爲零或一個。另外,EnumerateFiles通常更高效。

嘗試

string[] countries = ["IN", "MY", ...]; 

foreach (var name in Directory.GetFiles(path, @"??_CCMS_CARD0*.*")) 
{ 
    var country = name.Substring(0, 2).ToUpper(); 
    if (!countries.Contains(country)) 
    continue; 
    // do something 
} 
相關問題