在发送到流程参数

时间:2017-05-12 10:40:18

标签: c# string replace process split

有没有办法在子字符串之前删除\字符,因此在“某些文本”中没有它的情况下会出现引号,在将其打印到控制台时会显示,但是在将其作为传入时显示一个进程参数,看起来像“一些文本”

示例:

StringBuilder builder = new StringBuilder();
builder.Append("-i some//directory//on//pc//");
builder.Append("somevariables which include white spaces including : // @ chars");
builder.Append("\"this\\is\\another\\directory\\but\\in\\quotation\\marks at the begining\\");
builder.Append("some string variable with an extension such as .mp3 and then end quotation marks\"");
string commandLineArgToAProcess = builder.ToString(); 

process = new Process();
ProcessStartInfo info = new ProcessStartInfo("some\\die\\program.exe",
                        commandLineArgToAProcess);  

process.StartInfo = info;
process.Start();

不确定如何在打印到控制台时没有出现的引号的开头和结尾之前删除\,但是在将参数传递给进程时它会包含它。

还尝试使用regex.replace但抛出异常 也尝试拆分字符串,但每次字符串长度不同时都会实现,并且可能有更好的方法 使用stringbuilder时一切正常,但是因为我必须将它转换为.ToString()作为进程参数,它再次添​​加反斜杠 无论如何要绕过这个将不胜感激 感谢

1 个答案:

答案 0 :(得分:0)

需要反斜杠来掩盖引号。否则它将被解释为字符串的结尾。这也是为什么在你正在打印的虚构路径中总共有两个反斜杠的原因。第一个掩盖了第二个。如果没有两个反斜杠将与下面的符号一起解释。例如\ n将是一个新行。

您可以在字符串前放置一个@来禁用屏蔽。但这对引号不起作用。