C#用更改的名称替换文件

C#用更改的名称替换文件,c#,C#,我正在尝试查找和替换文件,但是有一点问题。 这些文件的结构类似于PAVS\u 13001\u 0\u I.pts。数字13001\u 0根据版本的不同而变化。但是,我需要替换包含字符串PAVS######I.pts的文件 请记住,有许多文件的名称不同,例如PM\u 13001\u 0\u I.pts,build.13.0.1.4.ClientOutput.zip,等等。至少有15个这样的文件。字符串应该匹配,但数字会改变 如何替换数值变化的文件?如果它们都在同一目录中,可以尝试枚举该目录中的文件

我正在尝试查找和替换文件,但是有一点问题。 这些文件的结构类似于
PAVS\u 13001\u 0\u I.pts
。数字
13001\u 0
根据版本的不同而变化。但是,我需要替换包含字符串
PAVS######I.pts的文件

请记住,有许多文件的名称不同,例如
PM\u 13001\u 0\u I.pts
build.13.0.1.4.ClientOutput.zip
,等等。至少有15个这样的文件。字符串应该匹配,但数字会改变


如何替换数值变化的文件?

如果它们都在同一目录中,可以尝试枚举该目录中的文件,并将名称与正则表达式进行比较,如下所示:

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
    }
  }
}
给你:

//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)));
}
它工作正常

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


更新:现在代码正在读取当前配置文件上的
appSettings
。请记住添加对
系统配置的引用

替换是什么意思?是否要重命名它们?您可以使用正则表达式匹配这些文件名。您的生活中需要更多正则表达式这与C#有什么关系?如果你想“替换”C#中的文件,你有没有自己的代码,我们可以根据这些代码来回答你的问题?@user2619395:那么我可以谦虚地建议你将问题限制在基于名称模式识别文件的问题上;也许可以说明你目前对这个问题的态度(都是通过编辑)?其他一切(如“替换文件”的说法)实际上似乎都不相关,但只会引起不确定性、问题,甚至否决票。这就是至少有15个文件需要替换,但可能更多。所以它必须是非常通用的。至少15个文件符合该模式,或者至少15个名称模式?如果有多个模式,它是一个常量集吗?是否基于用户输入?更新为使用前缀列表。如果不仅仅是前缀发生变化,很可能是整个模式的列表。至少15个或更多模式,取决于将哪些文件放入源文件夹。您还需要找出文件夹中存在哪些模式吗?例如,查看文件夹并说,“这些是文件名模式;对于每个模式,这些是具有该模式但版本号不同的文件;现在我想对这些文件执行x”?我又完全不确定你到底想做什么了。根据OP,前缀比pavst多。这也会匹配PAVS\u things\u that\u not\u numbers\u I.pts。不确定OP是否可以接受。搜索仍然可以用于预筛选文件,但是。@Saggio谢谢,更新了answer@Michelle这是另一个好观点。我想得到关于它的反馈。它应该匹配多种模式。我希望有什么东西可以搜索字符串的开头,直到它得到一个数字值,然后再搜索字符串,看看是否有任何字符。也许这种逻辑会起作用?我希望这是有道理的。。
PAVS_123_1_I.pts
PAVS_123_2_I.pts
whatever.txt