Сигнал запуска при достижении предела размера файла

Я пишу файлы журналов и хотел бы установить ограничение размера в 10 мес.

Я думал о создании QTimer запуск каждые X минут / часов QFileInfo::refresh и проверка размера файла.

Был бы лучший способ сделать это? Используя QTimer звучит больно и дорого для меня. Я хотел бы использовать SIGNAL когда достигнут предел размера.

1 ответ

Простое и рабочее решение - прочитать размер файла с помощью 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
}
Другие вопросы по тегам