【32】C#实战篇——两个文件夹下 相同名字的文件 进行配对(两个文件夹下的文件数量和文件类型不一定相同,所以要过滤掉我们不要的文件)

1 问题描述

如图,两个文件夹下 相同文件名的.csv文件进行配对,将配对成功的文件名按顺存分别储在数组StandardDataPathCurrentDataPath中,匹配成功一对就存储一对,注意匹配的一对文件名在两个数组中各存储一个表示对应关系,并返回匹配的总对数。

在这里插入图片描述

例如

“E:\MTF\P1\StandardData”路径下有“00000000000001Tele.csv,00000000000001Wide.csv”两个文件;
“E:\MTF\P1\CurrentData”路径下有“00000000000001Tele.csv,00000000000001Wide.csv,result_Wide.csv”三个文件。

经过配对后发现StandardData文件夹下的两个文件“00000000000001Tele.csv,00000000000001Wide.csv”分别和CurrentData文件夹下的两个文件“00000000000001Tele.csv,00000000000001Wide.csv”名字匹配。

然后我们存储结果示例:

StandardDataPath= {Path+00000000000001Tele.csv,Path+00000000000001Wide.csv},
CurrentDataPath= {Path+00000000000001Tele.csv,Path+00000000000001Wide.csv}

可以看到两个数组中存储的文件名是按顺序一一对应关系,并且文件包含完整的打开路径。

2 分析

因为 两个文件夹下的文件数量和文件类型不一定相同,所以要过滤掉我们不要的文件;

过滤条件string[] MatchFilter = { "Wide.csv", "Tele.csv", "Mid.csv" };”
只要文件名末尾部分满足““Wide.csv”, “Tele.csv”, “Mid.csv””任意一个,则认为是我们的想要的文件。注意同一个文件名末尾只有MatchFilter数组中一个字符串是匹配的,不存在同一个文件有两多个不同的末尾部分。然后在按照配对规则对文件匹配,匹配成功一对就存储一对,分别储在数组StandardDataPath、CurrentDataPath中。下面是函数名定义。

在这里插入图片描述

3 代码实现

 private int MatchCsvFiles(string standardDataPath, string currentDataPath, string[] MatchFilter, out string[] standardDataFiles, out string[] currentDataFiles)
 {
     // 构建匹配后缀的正则表达式模式,用来匹配文件名是否以指定的后缀字符串中的任意一个结尾。
     string suffixPattern = "(" + string.Join("|", MatchFilter.Select(filter => Regex.Escape(filter))) + ")$";
     var regex = new Regex(suffixPattern);

     // 获取标准数据文件夹下的所有文件
     var standardFiles = Directory.GetFiles(standardDataPath);

     // 存储配对成功的文件路径
     var matchedStandardFiles = new List<string>();
     var matchedCurrentFiles = new List<string>();

     // 遍历标准数据文件
     foreach (var standardFile in standardFiles)
     {
         // 获取文件名
         string fileName = Path.GetFileName(standardFile);

         // 如果文件名匹配后缀规则
         if (regex.IsMatch(fileName))
         {
             // 构造当前数据文件夹中对应的文件路径
             string currentFilePath = Path.Combine(currentDataPath, fileName);

             // 如果当前数据文件夹中存在对应文件,则存储匹配成功的文件对
             if (File.Exists(currentFilePath))
             {
                 matchedStandardFiles.Add(standardFile);
                 matchedCurrentFiles.Add(currentFilePath);
             }
         }
     }

     // 将配对成功的文件路径数组赋值给输出参数
     standardDataFiles = matchedStandardFiles.ToArray();
     currentDataFiles = matchedCurrentFiles.ToArray();

     // 返回配对成功的文件对数
     return standardDataFiles.Length;
 }

匹配存储结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-G-B

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值