C# 更改 DOS 通配符上的文件名

C# change file name on DOS wildcards

我们有一个 .net 程序,它基本上将文件从一个文件夹复制到另一个文件夹,并且通常在复制过程中更改文件的名称。客户使用 DOS 样式通配符提供要复制的文件名和目标文件名。

例如:

来源:*.log 目标:*.txt

复制 aa.log 到 aa.txt , bb2.1.log 到 bb2.1.txt 等等

来源:abc*.csv 目标:KK*_123.csv

复制abcxyz.csv到KKabcxyz_123.csv,abc1722.mm.csv到KKabc1722.mm_123.csv

如何在 C# 或 VB.net 中实现此类复制/重命名?

File.Copy(SourceFile, TargetFile )不支持文件名中的通配符(*,?),所以问题可能是,如何生成目标文件名?

PS 如果绝对必要,我可以对源/目标文件名施加一些限制,但我想避免它。

PPS 如有必要,可以将流程划分为单独的部分。 示例 #2:来源:abc*.csv 目标:KK*_123.csv

可以替换为
来源:abc*.csv 目标:KK*.csv

和 来源:KK*.csv 目标:*_123.csv

.

我不知道有完全内置的解决方案,但 .NET 会为您进行模式匹配。 Directory.EnumerateFiles(string, string) 接受一个模式来匹配源文件。你可以做类似

的事情
foreach (var sourceFile in Directory.EnumerateFiles(myPath, thePattern))
{
    var targetFile = ApplyPattern(sourceFile, thePattern);
    File.Copy(sourceFile, targetFile);
}

您需要通过检查 EnumerateFiles 找到的源文件并应用占位符逻辑来自己实现 ApplyPattern。

也许还有我不知道的更好的解决方案。如果没有,这至少会为您处理源匹配。