Я хочу вызвать исполняемый файл через QProcess.Путь к исполняемому файлу может содержать пробелы.Поэтому я помещаю цитаты по пути к исполняемому файлу.
Однако это работает только до тех пор, пока я не добавлю никаких аргументов.
Следующий код воспроизводит проблему:
#include <QCoreApplication>
#include <QProcess>
#include <QDebug>
#include <QDir>
int main(int argc, char *argv[])
{
int i = 0; // no whitespace, no argument -> works
// int i = 1; // whitespace with quotation, no arguments -> works
// int i = 2; // no whitespace, arguments -> works
// int i = 3; // whitespace with quotation, arguments -> works not
QCoreApplication a(argc, argv);
QProcess *process = new QProcess();
QString pathToFile;
QString absolutePathToProgram;
pathToFile = "/home/user/tmp/file.xml";
if (i == 0){
absolutePathToProgram = "/home/user/tmp/executable";
}else if(i == 1){
absolutePathToProgram = "/home/user/tmp whitespace/executable";
absolutePathToProgram = "\"" + absolutePathToProgram + "\"";
}else if(i == 2){
absolutePathToProgram = "/home/user/tmp/executable";
}else if(i == 3){
absolutePathToProgram = "/home/user/tmp whitespace/executable";
absolutePathToProgram = "\"" + absolutePathToProgram + "\"";
}
QStringList arguments;
arguments << pathToFile;
if (i==0 || i==1){
process->start(absolutePathToProgram);
}else{
process->start(absolutePathToProgram,arguments);
}
process->waitForFinished();
QString output(process->readAllStandardOutput());
qDebug() << output;
return a.exec();
}
Я добавил 4 случая:
i == 0
: путь к исполняемому файлу не содержит пробелов, и мыне передавайте аргументы.Это работает i == 1
: путь к исполняемому файлу содержит пробелы, и мы не передаем аргументы.Это работает i == 2
: путь к исполняемому файлу не содержит пробелов, и мы передаем аргументы.Это работает i == 3
: путь к исполняемому файлу содержит пробелы, и мы передаем аргументы.Это не работает
Почему не работает case i == 3
?
Я использую Ubuntu в качестве операционной системы.
БОНУС:
Мне также нужно, чтобы он работал на Windows.Обычно в Windows я запускаю программу с:
process->start("cmd.exe", QStringList() << "/c" << absolutePathToProgram << pathToFile);
У меня не было времени протестировать его в Windows, но если кто-то отправляет ответ, а также знает, как создать решение для Windows, сообщитея знаю.