簡體   English   中英

Qt QFile / QTextStream,無法解析/ proc / stat

[英]Qt QFile/QTextStream, unable to parse /proc/stat

我在使用Qt解析/proc/stat時遇到問題。

我遇到的問題是QFile狀態/proc/stat既開放可讀。

嘗試分別讀取QTextStreamQTextStream顯然指示流已完成,但是我知道通過運行cat /proc/stat並非如此。

while循環中的任何代碼均未執行。 有什么建議嗎?

  int UsageStatistics::handle_timeout(const ACE_Time_Value& currentTime, const void* param) {

        INFO("Handling timeout\n");

        QFile file(QString("/proc/stat"));
        if (!file.open(QIODevice::ReadOnly)) {
            ERROR("Unable to open file %s, aborting\n", file.fileName().toStdString().c_str());
            return false;
        }                 

        if (!file.isReadable()) {
            ERROR("Unable to read file %s, aborting\n", file.fileName().toStdString().c_str());
            return false;
        }



        QTextStream in(&file);            
        while (!in.atEnd()) {
            QString line = in.readLine();        

            INFO("%s\n", line.toStdString().c_str());

             /// processing
        }

        file.close();

        return true;          
    }

/ proc / stat是一個很小的文件,沒有太大的風險。 只需將readAll()放入QByteArray(不進行atEnd()檢查,您已經完成了isReadable()),然后將QTextStream指向字節數組(如果要使用相同的方式進行解析)。

QFile file(QString("/proc/stat"));
if (!file.open(QIODevice::ReadOnly)) {
    qDebug("Unable to open file %s, aborting\n", 
        qPrintable(file.fileName()));
    ui->plainTextEdit->appendPlainText("Error can't open");
    return;
}

if (!file.isReadable()) {
    qDebug("Unable to read file %s, aborting\n", 
        qPrintable(file.fileName()));
    ui->plainTextEdit->appendPlainText("Error can't read");
    return;
}

QByteArray contents = file.readAll();

QTextStream in(&contents);
while (!in.atEnd()) {
    QString line = in.readLine();

    qDebug("Read: %s\n", qPrintable(line));

    ui->plainTextEdit->appendPlainText(line);
}

ui->plainTextEdit->appendPlainText("Done reading.");

file.close();

我只是驗證了我的系統是否與您的系統相同,然后嘗試了這種基於readAll()的方法,並且該方法有效。

您正在使用cpuRegex.exactMatch ,它正在尋找完全匹配整行的方法。 並且您正在尋找的那條線還有其他信息。 嘗試改用cpuRegex.indexIn(line) == 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM