繁体   English   中英

QProcess()并不总是有效

[英]QProcess() doesn't always work

我试图通过将mkfs.fat与QProcess()一起使用来格式化来自Qt的USB驱动器。 问题是调用了QProcess(),但有时它退出而没有完成格式化。 如果我读取exitCode() ,则为1。

这是功能:

bool UsbDevice::formatFat(QByteArray name)
{
    QProcess * formatter = new QProcess(this);

    QString partition = baDevice + "1"; // baDevice is "/dev/sdb"
    QString mkfs = "mkfs.fat";

    QStringList args;
    args << "-F32" << "-v" << "-I" << "-n " + name << partition;

    formatter->start(mkfs, args);

    formatter->waitForStarted();

    formatter->waitForFinished(-1);

    emit logLine(formatter->readAll());

    if (formatter->exitCode() == 0)
        {
            emit logLine("mkfs.fat executed correctly.");
        }
    else
        {
            emit logLine(QString("Possible fail to format device (Error: %1).").arg(formatter->errorString()));
        }

    delete formatter;

    return true;
}

如果调用3-5次,则该功能有效。 我知道还有更多的问题(例如,由于使用了waitFor*函数,此函数阻止了用户界面,并且其中一个可以永久阻止而没有超时),但我不明白为什么该过程不会有时候完成确定。

logLine调用qDebug ,当它不起作用时输出如下:

mkfs.fat 3.0.27 (2014-11-12)

Possible fail to format device (Error: Unknown error).

工作时,将输出:

mkfs.fat 3.0.27 (2014-11-12)
/dev/sdb1 has 64 heads and 32 sectors per track,
hidden sectors 0x0800;
logical sector size is 512,
using 0xf8 media descriptor, with 30279937 sectors;
drive number 0x80;
filesystem has 2 32-bit FATs and 16 sectors per cluster.
FAT size is 14771 sectors, and provides 1890647 clusters.
There are 32 reserved sectors.
Volume ID is c35005fb, volume label  USB   .

mkfs.fat executed correctly.

这使我认为论点是正确的。

我也尝试将finished()信号连接到插槽并阻塞,直到信号发出为止,但仍然没有运气。

该文档是不是这个很清楚,但它看起来像readAll具有输出相同readAllStandardOutput 软件通常会在stderr(StandardError)上输出错误,因此您必须调用readAllStandardError才能看到错误消息。 因此QProcess()没什么问题,只是mkfs.fat失败了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM