查找并替换带有特殊字符的文字

时间:2015-12-04 17:30:22

标签: c# string replace visual-studio-2015

我有一堆脚本,其中包含我需要更改为其他行的特定行。

例如我的主要看起来像这样:

string Path = @"C:\foo\bar\bin\";
string Conf = "foo.bar.conf.bat";
string OldValue = "rem set \"PARAM =% PARAM % -Foo:BAR = foo,bar = 123,fff = bbb,aaa\"";
string NewValue = "set \"PARAM =% PARAM % -Foo:BAR = foo,bar = 123,fff = bbb,aaa\"";
Console.WriteLine(FART(Path + Conf, OldValue, NewValue));

private static string FART(string PathToFile, string OldValue, string NewValue)
{
    string file = File.ReadAllText(PathToFile);
    OldValue = OldValue.Replace(@"\", "");
    NewValue = NewValue.Replace(@"\", "");
    file = file.Replace(OldValue, NewValue);
    File.WriteAllText(PathToFile, file);

    string output = PathToFile + " " + OldValue + " " + NewValue;

    return output;
}

我需要取消注释的字符串在此文件中是唯一的。我的问题是文件被更改(我可以看到修改日期更改)但内容是相同的。

关于类似的问题,这种方法应该尽我所能。

1 个答案:

答案 0 :(得分:0)

位于PathToFile的文件没有OldValue的任何出现。

格式化OldValueNewValue的逻辑可能是错误的。

从这一行:

OldValue = OldValue.Replace(@"\", "");

我可以看到您要从OldValue中删除反斜杠,但是您已定义OldValue的方式:

string OldValue = "rem set \"PARAM =% PARAM % -Foo:BAR = foo,bar = 123,fff = bbb,aaa\"";

它没有任何反斜杠开头。

请注意,当您在C#中的字符串中使用\"时,它实际上只会插入"。 (当然,除非您在字符串前加上@)。

如果你删除这两行,它应该有效:

OldValue = OldValue.Replace(@"\", "");
NewValue = NewValue.Replace(@"\", "");