从值的末尾删除\

时间:2016-06-16 13:26:43

标签: c#

我有以下代码:

if (BrowserName.ToUpper().Contains("FIREFOX"))
    privateModeParam = " -private-window";
string extraspeech = "\"";
string both = BrowserName + extraspeech + privateModeParam;
Process.Start(both, URLFromDB);

当它运行时,它返回以下值:

BrowserName = "c:\\program files\\mozilla firefox\\firefox.exe"
both = "c:\\program files\\mozilla firefox\\firefox.exe\" -private-window"
privateModeParam = " -private-window"

我需要做的是,从\字符串修剪both,因为它不能用反斜杠打开firefox。

我应该添加,如果我只是这样做:

string both = BrowserName + privateModeParam;

返回的值是“c:\ program files \ mozilla firefox \ firefox.exe \ -private-window” 什么不会打开Firefox

3 个答案:

答案 0 :(得分:4)

导致问题的原因是双引号("),而不是反斜杠。字符串中的这个位置没有反斜杠,它只是由调试器显示,因为c#使用\来转义字符串文字中的"之类的东西。

所以你的问题似乎是忘了在可执行文件之前添加extraspeech

string both = extraspeech + BrowserName + extraspeech + privateModeParam;

或更好

string both = $"\"{BrowserName}\" {privateModeParam}"; // C#6
string both = string.Format("\"{0}\" {1}", BrowserName, privateModeParam); // pre C#6

更新

但这里真正的问题似乎是你在fileName参数中传递了一个命令行参数,而在arguments参数中传递了一个。

你应该像这样呼叫Process.Start

Process.Start(BrowserName, $"{privateModeParam} {URLFromDb}");

只需传递arguments参数旁边的所有参数即可。然后也不需要将可执行文件包装在双引号中,因为它是fileName参数中唯一的字符串。有关Process.Start()的参数的详细信息,请参阅MSDN

答案 1 :(得分:0)

if (BrowserName.EndsWith("\\")){
    BrowserName = BrowserName.Substring(0, BrowserName.Length - 1);
}

both = both.Replace("\\\"", ""); 

可以解决您的问题

答案 2 :(得分:0)

最简单的方法是使用Substring:                 MyString = MyString.Substring(0,MyString.Length - 1);