-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

它工作正常。

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

更新appSettings:现在代码正在从当前配置文件中读取。只需记住添加对System.Configuration.

于 2013-08-02T13:29:16.133 回答