达到文件大小限制时触发信号

时间:2016-08-30 15:34:31

标签: c++ qt signals qfileinfo

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

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

有更好的方法吗?使用QTimer对我来说听起来很痛苦且资源成本高昂。我希望在达到限制大小时可以使用SIGNAL

1 个答案:

答案 0 :(得分:0)

简单且有效的解决方案是读取文件大小,在写入后立即使用QFile::size() 到日志文件中,如果大小超过<,则做出反应< / strong>限制。请注意,读取大小时必须打开该文件。

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
}