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

标签 c++ qt signals qfileinfo

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

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

有没有更好的方法来做到这一点?使用 QTimer 对我来说听起来很痛苦,而且很费资源。我希望在达到限制大小时可以使用 SIGNAL

最佳答案

简单有效的解决方案是读取文件大小 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
}

关于c++ - 达到文件大小限制时触发信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39231720/

相关文章:

c - 给定一个带有信号名称的字符串,如何获得适当的信号编号?

c++ - 模板特化基类函数模板缺失

c++ - 如何使用 Qt 运行 Windows cmd 命令?

c++ - 在图上实现 BFS

c++ - Visual Studio 2010 C++ 不显示控制台输出,尽管控制台子系统设置

c++ - std::invoke 和指向类成员的复杂函数指针

python:如何中断正则表达式匹配

qt - 是否可以从 Qt5 QML 中的信号断开所有插槽?

c++ - C/C++ : 2-D array variable subscript

c++ - 访问整数和 vector 对的 vector 中的元素