2010-05-20 49 views
0

我有一个奇怪的问题,我似乎无法弄清楚。Regex.Replace()在更改文件名时出现问题

我的文件名是这样的:
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.

为什么该行代码导致该例程不改变e文件名?

回答

2

在第二次调用时使用newfilename而不是fDialog.FileName,否则第一次调用的返回值将不会被使用。

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

+0

太棒了。谢谢。 – fraXis 2010-05-20 23:30:20