代码之家  ›  专栏  ›  技术社区  ›  Tim Hutchison

文件名、目录名或卷标语法来自qt creator c的系统调用不正确++

  •  1
  • Tim Hutchison  · 技术社区  · 10 年前

    当我运行命令时 C:\My Programs\CPU Analysis\scripts\ruinIODump.bat 在命令行中,该命令运行良好,但当我从qt-creator运行该命令时:

    system("\"\"C:\\My Programs\\CPU Analysis\\generateSanity_Scripts\\runIODump.bat\"\" \"\"C:/My\ Programs/CPU\ Analysis/iodump/065901_iodump.txt\"\"")
    

    我得到了错误: The filename, directory name, or volume label syntax is incorrect.

    ...

    我尝试过直接通过system()命令运行.bat文件中的命令,尝试过更改引号,也尝试过使用转义符,但始终收到相同的错误。如何从qt创建者运行.bat文件?我看了其他类似的SO问题,但没有一个回答我的问题。

    2 回复  |  直到 10 年前
        1
  •  1
  •   Korvo David Thomas    10 年前

    正如MCDC所说,你的问题是分离器。

    我建议使用 QProcess 具有 QDir::toNativeSeparators ,例如:

    const QString app = QDir::toNativeSeparators("C:/My Programs/CPU Analysis/generateSanity_Scripts/runIODump.bat");
    
    const QString params = QDir::toNativeSeparators("C:/My Programs/CPU Analysis/iodump/065901_iodump.txt");
    
    QProcess process;
    QObject::connect(&process, SIGNAL(error(QProcess::ProcessError)), this, SLOT(myError(QProcess::ProcessError)));
    QObject::connect(&process, SIGNAL(stateChanged(QProcess::ProcessState)), this, SLOT(myState(QProcess::ProcessState)));
    QObject::connect(&process, SIGNAL(finished(int)), this, SLOT(myEnd(int)));
    process.start(app, QStringList() << params);
    

    Qprocess是异步的,使用 QObject::connect (参见示例)

    这将避免“分离器”的问题

        2
  •  0
  •   MC ND    10 年前
    system("\"C:\\My Programs\\CPU Analysis\\generateSanity_Scripts\\runIODump.bat\" \"C:\\My Programs\\CPU Analysis\\iodump\\065901_iodump.txt\"");
    

    我想你的引号太多了,还有一些错误的斜杠