我正在尝试查找和替换文件但是有点问题。
这些文件的结构类似于PAVS_13001_0_I.pts
。数字13001_0
会根据版本而变化。但是,我需要替换具有字符串PAVS_####_#_I.pts
请注意,有许多文件的名称不同,例如PM_13001_0_I.pts
,build.13.0.1.4.ClientOutput.zip
等。至少有15个这样的文件。字符串应该匹配,但数字会改变。
如何更换数值更改的文件?
答案 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
的引用。