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
,因为我可以静态地使用它。
CreateSymbolicLinkA
,
但它在mingw5.3.0中不可用
.
总而言之,我的问题是:如何正确地引用传递给