簡體   English   中英

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如有必要,可以將過程分為單獨的部分。 Example#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找到的sourceFile並應用占位符邏輯來自己實現ApplyPattern。

也許有一個我不知道的更好的解決方案。 如果不是,則至少將為您處理匹配的源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM