更改文件名时出现Regex.Replace()问题

时间:2010-05-20 22:43:24

标签: c# regex replace filenames

我遇到了一个奇怪的问题,我似乎无法弄明白。

我的文件名是这样的:
DER 1513016-3.020F.NCF.

我希望能够将其更改为:
DER 1513016-3.020H.NCF

有时文件名也可以这样:
DER 1513016-3.020F_NEW.NCF

将改为:
DER 1513016-3.020H_NEW.NCF

这是我的代码:

OpenFileDialog fDialog = new OpenFileDialog();
fDialog.Title = "Open";
fDialog.Filter = "NCF files (*.ncf)|*.ncf|All files (*.*)|*.*";
fDialog.InitialDirectory = "C:\\Program Files";
if (fDialog.ShowDialog() == DialogResult.OK)
{
    string newfilename;
    string fileext = Path.GetExtension(fDialog.FileName);

    newfilename = Regex.Replace(fDialog.FileName, "F.NCF", "H.NCF");
    newfilename = Regex.Replace(fDialog.FileName, "F_NEW.NCF", "H_NEW.NCF");
} 

这就是事情变得奇怪的地方。代码现在的工作方式,它不会将文件名更改为DER 1513016-3.020H.NCF

如果我注释掉这行代码:

//newfilename = Regex.Replace(fDialog.FileName, "F_NEW.NCF", "H_NEW.NCF");

它将正常工作,文件现在将变为:DER 1513016-3.020H.NCF

但是,如果我取消注释该行代码,则文件名不会更改为DER 1513016-3.020H.NCF.它将保持为DER 1513016-3.020F.NCF.

为什么这行代码会导致例程不更改文件名?

1 个答案:

答案 0 :(得分:2)

在第二次通话中使用newfilename代替fDialog.FileName,或者永远不会使用第一次通话的返回值。

PS:您可以使用String.Replace代替Regex.Replace,因为您没有使用任何正则表达式。另外,点表示正则表达式中的“任何字符”,因此您应该考虑转义它。