Проблема с Regex.Replace () при изменении имени файла - PullRequest
0 голосов
/ 21 мая 2010

У меня странная проблема, и я не могу ее решить.

Мое имя файла примерно такое:
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 Ответ

2 голосов
/ 21 мая 2010

Используйте newfilename вместо fDialog.FileName при втором вызове, иначе возвращаемое значение первого никогда не будет использовано.

PS: Вы можете использовать String.Replace вместо Regex.Replace, поскольку вы не используете регулярные выражения. Кроме того, точка означает «любой символ» в регулярном выражении, поэтому вам следует подумать о том, чтобы избежать его.

...