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

本文关键字:文件 模式 通配符 | 更新日期: 2023-09-27 18:14:42

我的问题是。我正在从目录中获取文件列表。文件名有特定的命名约定,它们有一个国家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
        }

我想把SG_CCMS_CARO替换成类似*_CCMS_CARDO的东西,这将获得所有名称中包含CCMS_CARDO的文件。

任何帮助将不胜感激。由于

谢谢你的回答。但还有一个更深层次的问题。我得到了7个文件的列表,其中有类似的名称??_CCMS_CARDO, ? ?_CCMS_CAMP ? ? _CCMS_RPC。我想要通配符模式匹配包含方法,因为我正在为每个文件做一些事情(?? ?_CCMS_CARD等),因为这是在多个地方使用,我不想做太多的改变。我真正想要的是将多个nputfilepath.ToUpper(). contains ("ID_CCMS_CARDO_"))替换为nputfilepath.ToUpper(). contains ("?? ?_CCMS_CARDO_")),这将所有包含CCMS_CARDO的文件。由于

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

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

使用'?为0或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
}