C# 从值的末尾删除

C# 从值的末尾删除,c#,C#,我有以下代码: if (BrowserName.ToUpper().Contains("FIREFOX")) privateModeParam = " -private-window"; string extraspeech = "\""; string both = BrowserName + extraspeech + privateModeParam; Process.Start(both, URLFromDB); 当它运行时,返回以下值: BrowserName = "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"
我需要做的是,修剪
\
中的
\
字符串,因为它不会用反斜杠打开firefox

如果我只是这样做,我应该补充:

string both = BrowserName + privateModeParam;
返回的值为“c:\program files\mozilla firefox\firefox.exe \-私有窗口”
无法打开Firefox的是双引号(
),而不是反斜杠。字符串中的这个位置没有反斜杠,它只是由调试器显示,因为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(BrowserName, $"{privateModeParam} {URLFromDb}");

只需在
arguments
参数中传递所有参数。然后也不需要将可执行文件用双引号括起来,因为它是
fileName
参数中唯一的字符串。有关
Process.Start()
参数的详细信息,请参阅。导致问题的是双引号(
),而不是反斜杠。字符串中的此位置没有反斜杠,它仅由调试器显示,因为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(BrowserName, $"{privateModeParam} {URLFromDb}");
只需在
arguments
参数中传递所有参数。然后也不需要将可执行文件用双引号括起来,因为它是
fileName
参数中唯一的字符串。有关
Process.Start()
参数的更多信息,请参阅

我可以解决你的问题


可以解决您的问题

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

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

那么为什么要使用外部语言呢?只是不要使用它。我认为添加了额外的反斜杠,因为在分配
时,您正在将
附加语音
添加到
浏览器名
。你就不能不在这里加上
extraspeech
吗?我想
c:\\program files\\mozilla firefox\\firefox.exe开头缺少了一个双引号“
那么为什么要使用
附加语音
?只是不要使用它。我认为添加了额外的反斜杠,因为在分配
时,您正在将
附加语音
添加到
浏览器名
。你就不能不在这里添加
extraspeech
吗?我想在
c:\\program files\\mozilla firefox\\firefox.exe“
的开头缺少一个双引号,对于这两个,它都返回“\”c:\\program files\\mozilla firefox\\firefox.exe\”-私有窗口的值而且它仍然无法打开firefox。对于这两种情况,它返回“\”c:\\program files\\mozilla firefox\\firefox.exe\”-private window”的值,并且仍然无法打开firefox