2016-06-21 13 views
0

本質的には、あるフォルダから別のフォルダにファイルをコピーし、コピー中にファイルの名前を変更する.netプログラムがあります。 DOS形式のワイルドカードを使用して、コピーするファイル名&をファイル名に指定します。例えばC#DOSワイルドカードでファイル名を変更

出典:* .logのターゲット:aa.txtする* .txtの

コピーaa.logなど

をbb2.1.txtするbb2.1.logまたは

出典:ABC * .CSV対象:KKabcxyz_123.csvにabcxyz.csv KK * _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

と 出典:株式会社* .csv対象:* _123.csv

+1

ソースがabc * .csvで、ターゲットがxyz * _123.csvの場合、abcxyz_cs .csvではなくxyzxyz_123.csvにabcxyz.csvをコピーする必要がありますか? – juharr

+0

あなたは正しいです。私は自分の質問を修正した。実際には、この例の予想されるターゲットファイル名はxyzabcxyz_123.csvです。つまり、ファイル名の先頭に 'xyz'を追加し、ファイル拡張子の前に '_123'を追加します – Alex

答えて

3

私は完全に組み込みのソリューションを認識していませんが、.NETはパターンマッチングを行います。 Directory.EnumerateFiles(string, string)は、ソースファイルと一致するパターンを受け入れます。あなたはEnumerateFilesによって発見SOURCEFILEを調べ、プレースホルダのロジックを適用することによって、自分自身をApplyPattern実装する必要があるだろう

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

ような何かを行うことができます。

おそらく私が気付いていないより良い解決策があります。そうでなければ、これは少なくともソースマッチングを処理します。

関連する問題