【问题标题】:Problem with Regex.Replace() while changing a filename更改文件名时出现 Regex.Replace() 问题
【发布时间】:2010-05-20 22:43:24
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# regex replace filenames


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-29
      • 1970-01-01
      • 2016-01-25
      • 2019-07-15
      • 2015-08-26
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多