2010-05-20 60 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