-5

ファイルを見つけて置き換えようとしていますが、少し問題があります。ファイルは のような構造になってPAVS_13001_0_I.ptsいます。数値13001_0はバージョンによって異なります。ただし、文字列を持つファイルを置き換える必要がありますPAVS_####_#_I.pts

PM_13001_0_I.pts、 など、名前が異なるファイルが多数あることに注意してくださいbuild.13.0.1.4.ClientOutput.zip。このようなファイルは少なくとも 15 個あります。文字列は一致するはずですが、数字が変わります。

数値が変化するファイルを置き換えるにはどうすればよいですか?

4

2 に答える 2

2

それらがすべて同じディレクトリにある場合は、そのディレクトリ内のファイルを列挙し、次のように名前を正規表現と比較してみてください。

string[] prefixes = {"PAVS", "PM"};
foreach (string filePath in Directory.EnumerateFiles(directory)
{
  foreach (string prefix in prefixes)
  {
    if (Regex.IsMatch(file, prefix + @"_\d+_\d+_I\.pts"))
    {
      //Move the file
    }
  }
}
于 2013-08-02T13:25:07.677 に答える
0

どうぞ:

//appSettings section:
//<add key="filename-patterns" value="PAVS_*_*_I.pts;omg.*.zip"/>
string[] patterns = ConfigurationManager.AppSettings["filename-patterns"].Split(';');
string sourceDir = @"C:\from\";
string destinationDir = @"C:\to\";

foreach (string pattern in patterns)
{
    IEnumerable<string> fileNames = Directory.EnumerateFiles(sourceDir, pattern, SearchOption.AllDirectories);

    fileNames.ToList().ForEach(x => File.Move(x, x.Replace(sourceDir, destinationDir)));
}

SearchOption.AllDirectories最後の引数を に変更して、すべてのツリーをトラバースできることに注意してください。ただし、移動先のフォルダに移動するときは、フォルダ構造が維持されます。

私はこれらのファイルを持っていましたC:\from

PAVS_123_1_I.pts
PAVS_123_2_I.pts
whatever.txt

そして、それは適切に機能しました。

更新: 複数のパターンで動作するようにコードを変更しました。そのリストを構成ファイルに保持できるため、新しいファイル パターンごとにアプリを再構築する必要はありません。

UPDATE : コードはappSettings現在の構成ファイルから読み取られます。への参照を追加することを忘れないでくださいSystem.Configuration

于 2013-08-02T13:29:16.133 に答える