我正在使用QProcess在Windows上创建符号链接:
QStringList mklink = { "/c", "mklink" };
if(QFileInfo(src).isDir()) mklink << "/d";
mklink << dst << src;
if(QProcess::execute("cmd", mklink) == 0) result = SUCCESS;
当参数/路径不包含特殊字符时,此选项可以正常工作。 当参数/路径包含特殊字符和空格时,它也适用,因为该参数已由QProcess正确地双引号。
问题是,当参数/路径不包含空格,因此不会转义任何特殊字符时,不会发生这种情况。
我尝试手动添加双引号:
if(!path.contains(" ")) path.append("\"").prepend("\"");
-also tried-
if(!path.contains(" ")) path.append('"').prepend('"');
但是在两种情况下,输出结果都是\C:\path\without\space\
。第一个和最后一个反斜杠是添加的双引号中的转义符。
一种替代方法是使用QProcess::setNativeArguments()
:
QProcess cmd(this);
QString mklink = "/c mklink";
if(QFileInfo(src).isDir()) mklink += " /d";
mklink += " \""+dst+"\" \""+src+"\"";
cmd.setNativeArguments(mklink);
cmd.start("cmd");
if(cmd.waitForFinished() && cmd.exitStatus() == QProcess::NormalExit && cmd.exitCode() == 0)
result = SUCCESS;
这可行,但是我想坚持使用QProcess::execute
,因为我可以静态使用它。
最简单的方法是使用WinAPI的CreateSymbolicLinkA
,,但在MinGW 5.3.0中不可用。
总而言之,我的问题是:如何正确地将传递给QProcess::execute
的参数加双引号?