C#用更改名称替换文件

时间:2013-08-02 13:16:08

标签: c#

我正在尝试查找和替换文件但是有点问题。 这些文件的结构类似于PAVS_13001_0_I.pts。数字13001_0会根据版本而变化。但是,我需要替换具有字符串PAVS_####_#_I.pts

的文件

请注意,有许多文件的名称不同,例如PM_13001_0_I.ptsbuild.13.0.1.4.ClientOutput.zip等。至少有15个这样的文件。字符串应该匹配,但数字会改变。

如何更换数值更改的文件?

2 个答案:

答案 0 :(得分: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
    }
  }
}

答案 1 :(得分: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

它运作正常。

更新:我修改了代码以使用多种模式。您可以将该列表保留在配置文件中,这样就不必为每个新文件模式重建应用程序。

更新:现在代码正在从当前配置文件的appSettings读取。请记住添加对System.Configuration的引用。