public static void launchProcess(string processName, string arguments, out string output)
{
Process p = new Process
{
StartInfo = { UseShellExecute = false, RedirectStandardOutput = true, FileName = processName, Arguments = arguments }
};
p.Start();
output = p.StandardOutput.ReadToEnd();
p.WaitForExit();
}
如果我的参数包含文件名,如:
D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS
然后我收到错误:
答案 0 :(得分:11)
它需要双打引号,但也可能需要@来对待字符串逐字(verbatim string),即“\”在字符串中具有特殊含义,例如\ t表示一个标签,所以我们要忽略\
不仅是双引号,还有@
string myArgument = @"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS";
答案 1 :(得分:5)
我在大多数应用程序中使用以下内容(如果需要),如果有空格,则在字符串的开头和结尾添加双引号。
public string AddQuotesIfRequired(string path)
{
return !string.IsNullOrWhiteSpace(path) ?
path.Contains(" ") && (!path.StartsWith("\"") && !path.EndsWith("\"")) ?
"\"" + path + "\"" : path :
string.Empty;
}
<强> 实例.. 强>
AddQuotesIfRequired(@"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS");
返回"D:\Visual Studio Projects\ProjectOnTFS\ProjectOnTFS"
AddQuotesIfRequired(@"C:\Test");
返回C:\Test
AddQuotesIfRequired(@"""C:\Test Test\Wrap""");
返回"C:\Test Test\Wrap"
AddQuotesIfRequired(" ");
返回空字符串
AddQuotesIfRequired(null);
返回空字符串
编辑
根据建议,更改了函数的名称,并添加了空引用检查。
添加了检查以查看字符串的开头和结尾是否已存在双引号,以免重复。
将字符串检查功能更改为IsNullOrWhiteSpace
以检查空格以及空或空,如果是,则返回空字符串。
答案 2 :(得分:2)
我意识到这是一个老线程,但对于那些在我之后看到这个的人,你也可以这样做:
string myArgument="D:\\Visual Studio Projects\\ProjectOnTFS\\ProjectOnTFS"
通过转义反斜杠,您不必使用@符号。只是另一种选择。