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。
也许还有我不知道的更好的解决方案。如果没有,这至少会为您处理源匹配。
我们有一个 .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。
也许还有我不知道的更好的解决方案。如果没有,这至少会为您处理源匹配。