2

我正在编写日志文件,并希望将大小限制设置为 10 Mo。

我正在考虑QTimer每 X 分钟/小时设置一次触发QFileInfo::refresh并检查文件的大小。

会有更好的方法来做到这一点吗?对我来说,使用 aQTimer听起来很痛苦且资源成本很高。我希望SIGNAL在达到限制大小时可以使用 a 。

4

1 回答 1

0

简单且可行的解决方案是在写入日志文件后立即读取文件大小,并在大小超过限制时做出反应。请注意,读取大小时必须打开文件。QFile::size()

void Logger::log(const QString &rLine)
{
    QFile f(logFileName());
    if (f.open(QIODevice::ReadWrite | QIODevice::Append | QIODevice::Text))
    {
        QTextStream out(&f);
        out << rLine << endl;
        qint64 f_size = f.size();
        f.close();
        checkFileSize(f_size);
    }
    else
    {
        QTextStream out(stdout);
        out << "CAN'T OPEN LOG FILE: " << logFileName();
    }
}

void Logger::checkFileSize(qint64 size)
{
    if (size <= maxFileSize())
    {
        return;
    }

    // Roll the log file or do whatever you wish like send a signal
}
于 2016-08-31T06:11:51.643 回答