繁体   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