通配符模式来匹配目录中的文件
本文关键字:文件 模式 通配符 | 更新日期: 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
}