簡體   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