【问题标题】:Wildcard pattern to match files from a directory用于匹配目录中文件的通配符模式
【发布时间】:2015-09-28 03:46:55
【问题描述】:

这是我的问题。我正在从目录中获取文件列表。文件名有特定的命名约定,它们有一个国家 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。我想要在 Contains 方法中进行通配符模式匹配,因为我正在为每个文件(??_CCMS_CARD 等)做一些事情,并且因为它在多个地方使用,所以我不想做太多的更改。我真正想要的是将多个 nputfilepath.ToUpper().Contains("ID_CCMS_CARDO_")) 替换为 nputfilepath.ToUpper().Contains("??_CCMS_CARDO_")) 之类的东西,它将所有包含 CCMS_CARDO.Thanks 的文件p>

【问题讨论】:

标签: c#


【解决方案1】:
 Directory.GetFiles("\\PATH_HERE", "*_CCMS_CARDO", SearchOption.TopDirectoryOnly);

【讨论】:

    【解决方案2】:

    使用“?”为零或一。另外,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
    }
    

    【讨论】:

      猜你喜欢
      • 2014-10-04
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-31
      • 2019-03-19
      • 2013-01-07
      相关资源
      最近更新 更多