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

C#更改DOS通配符上的文件名,c#,vb.net,wildcard,C#,Vb.net,Wildcard,我们有一个.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.ne

我们有一个.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*.u 123.csv

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

及 来源:KK*.csv目标:*u 123.csv


.

我不知道有一个完全内置的解决方案,但.NET将为您提供模式匹配。接受与上的源文件匹配的模式。你可以这样做

foreach (var sourceFile in Directory.EnumerateFiles(myPath, thePattern))
{
    var targetFile = ApplyPattern(sourceFile, thePattern);
    File.Copy(sourceFile, targetFile);
}
您需要通过检查EnumerateFiles找到的sourceFile并应用占位符逻辑来实现ApplyPattern


也许有一个更好的解决办法,我不知道。如果没有,这至少可以为您处理源代码匹配。

我不知道有完全内置的解决方案,但.NET将为您执行模式匹配。接受与上的源文件匹配的模式。你可以这样做

foreach (var sourceFile in Directory.EnumerateFiles(myPath, thePattern))
{
    var targetFile = ApplyPattern(sourceFile, thePattern);
    File.Copy(sourceFile, targetFile);
}
您需要通过检查EnumerateFiles找到的sourceFile并应用占位符逻辑来实现ApplyPattern


也许有一个更好的解决办法,我不知道。如果不是,这至少可以为您处理源匹配。

如果源是abc*.csv,目标是xyz*_123.csv,那么abcxyz.csv应该复制到xyzxyz_123.csv而不是abcxyz_123.csv吗?您是对的。我修正了我的问题。实际上,本例中预期的目标文件名应该是xyzacxyz_123.csv,也就是说,它只是将“xyz”添加到文件名的开头,并在文件扩展之前添加“_123”。如果源是abc*.csv,目标是xyz*.u 123.csv,那么abcxyz.csv应该复制到xyz_123.csv而不是abcxyz_123.csv吗?你是对的。我修正了我的问题。实际上,本例中预期的目标文件名应该是xyzabcxyz_123.csv,也就是说,它只是将“xyz”添加到文件名的开头,并在文件扩展名之前添加“_123”