代码之家  ›  专栏  ›  技术社区  ›  bur

双引号传递给QProcess::execute的参数?

  •  0
  • bur  · 技术社区  · 6 年前

    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中不可用 .

    总而言之,我的问题是:如何正确地引用传递给

    0 回复  |  直到 6 年前