Qt - 等待QProcess完成

6
我是使用 QProcess 命令行工具,但遇到了问题。
我的代码:
QProcess process;
process.start("cmd.exe");
process.write ("del f:\\b.txt\n\r");
process.waitForFinished();
process.close();

当我不为waitForFinished()传递参数时,它会等待30秒。我想在CMD命令执行后终止QProcess!既不多也不少!

2个回答

10
你需要发送exit命令来终止cmd.exe,否则它会一直等待命令。 这是我的建议:
QProcess process;
process.start("cmd.exe");
process.write ("del f:\\b.txt\n\r");
process.write ("exit\n\r");
process.waitForFinished();
process.close();

6
您要启动的进程是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::remove函数。

QFile file("f:\\b.txt");
if(file.remove())
    qDebug() << "File removed successfully";

仅仅为了完整起见,正如你的答案展示了几种方法,我想补充一下,将-1传递给QProcess::waitForFinished函数将不会触发任何超时。 - epsilon
它等待很久,但仍不起作用!这只是一份样本代码。我想使用CMD进行其他工作而不是删除。 - Mohammad Reza Ramezani
如果您正在使用命令执行其他任务,那么创建一个脚本并从QProcess中调用它会更容易(在我看来)。 - TheDarkKnight
2
@MohammadRezaRamezani 和 Merlin069 给出的建议一样。创建一个批处理文件,运行它以显示答案。 - epsilon
@jbh 我需要的所有东西都在第一篇帖子中。我想使用提到的代码,并等待完成命令提示符补全,而不是30秒。 - Mohammad Reza Ramezani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接