Qt - дождитесь завершения Qprocess

Я использую CMD от QProcess, но у меня есть проблема.

Мой код:

QProcess process;
process.start("cmd.exe");
process.write ("del f:\\b.txt\n\r");
process.waitForFinished();
process.close();

Когда я не передаю аргумент для waitForFinished(), он ждет 30 секунд. Я хочу завершить QProcess после выполнения команды CMD! Не много и не меньше!


person Mohammad Reza Ramezani    schedule 31.07.2014    source источник


Ответы (2)


Вам нужно завершить cmd.exe, отправив команду exit, иначе он будет ждать команд. Вот мое предложение:

QProcess process;
process.start("cmd.exe");
process.write ("del f:\\b.txt\n\r");
process.write ("exit\n\r");
process.waitForFinished();
process.close();
person ahmed    schedule 31.07.2014
comment
Здравствуйте, дорогой boussouira, Большое спасибо. Работал! Я отметил ваш ответ как решение. - person Mohammad Reza Ramezani; 01.08.2014

Процесс, который вы запускаете, — это cmd.exe, который сам по себе не завершится. Если вы вызываете cmd с аргументами, вы должны добиться того, чего хотите: -

QProcess process;
process.start("cmd.exe \"del f:\\b.txt"\"");
process.waitForFinished();
process.close();

Обратите внимание, что аргументы заключены в кавычки.

В качестве альтернативы вы можете вызвать процесс del без cmd: -

QProcess process;
process.start("del \"f:\\b.txt"\"");
process.waitForFinished();
process.close();

Наконец, если вы просто хотите удалить файл, вы можете использовать QFile: :удалить функцию.

QFile file("f:\\b.txt");
if(file.remove())
    qDebug() << "File removed successfully";
person TheDarkKnight    schedule 31.07.2014
comment
Просто ради завершения, поскольку ваш ответ демонстрирует несколько способов, я бы добавил, что передача -1 в QProcess::waitForFinished не вызовет тайм-аут - person epsilon; 31.07.2014
comment
Ждет долго И тоже не работает! Это пример кода. Я хочу использовать CMD для других заданий, не удаляя - person Mohammad Reza Ramezani; 31.07.2014
comment
Если вы используете команду для других задач, было бы проще (на мой взгляд) создать сценарий и вызвать его из QProcess. - person TheDarkKnight; 31.07.2014
comment
@MohammadRezaRamezani Тот же совет, что и у Merlin069. Создайте пакет, запустите его, как показано в ответе. - person epsilon; 31.07.2014
comment
@jbh Все, что мне нужно, в первом посте. Я не буду использовать указанный код и ждать завершения команды ppmt не 30 секунд. - person Mohammad Reza Ramezani; 31.07.2014