用于匹配目录中文件的通配符模式

时间:2015-09-28 03:46:55

标签: c#

这是我的问题。我从目录中获取文件列表。文件名具有特定的命名约定,它们具有国家/地区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替换SG_CCMS_CARO,这将获得名称中包含CCMS_CARDO的所有文件。

任何帮助将不胜感激。 感谢

感谢您的回答。但还有一个问题。我得到一个7个文件的列表,这些文件有类似的名字,如?? _ CCMS_CARDO,?? _ CCMS_CAMP,?? _ CCMS_RPC。我想要在Contains方法中匹配通配符模式,因为我正在为每个文件(?? _ CCMS_CARD等)做一些事情,因为这在多个地方使用,我不想做太多的更改。我真正想要的是替换多个nputfilepath.ToUpper()。包含(" ID_CCMS_CARDO _"))与nputfilepath.ToUpper()。包含(" ?? _ CCMS_CARDO _"))这将包含所有包含CCMS_CARDO.Thanks

的文件

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

使用'?'为零或一。此外,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
}