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 Всичко, което ми трябва в първия пост. Не искам да използвам споменатия код и да изчакам да завърша завършването на командата prpmt, а не 30 секунди - person Mohammad Reza Ramezani; 31.07.2014