Используя QT, как я могу удалить первую строку в текстовом файле, не читая весь файл? - PullRequest
0 голосов
/ 25 января 2019

Я вручную записываю события из моего приложения QT в текстовый файл.

Я отслеживаю, сколько строк я записываю в текстовый файл, и когда я получаю определенную сумму, я хочу начать удаление первой строки.

Мне не следует открывать и читать весь текстовый файл каждый раз, когда я хочу удалить первую строку, поскольку текстовый файл становится большим.

Это то, что я имею до сих пор:

if (file.open(QIODevice::Append)) {
    QTextStream stream(&file);
    stream << timeStamp+typeStamp+" "+message << endl;
    stream.flush();
    file.close();
    LOG_COUNT++;
} else {
    qWarning()<<"Utils::writeToLog - unable to write to log file";
}

if(LOG_COUNT > 5000){
    LOG_COUNT--;

    QFile inputFile(filename);
    if (inputFile.open(QIODevice::ReadWrite))
    {
       QTextStream in(&inputFile);
       QString line1 = in.readLine();
       QString line2 = in.readLine();

        qWarning()<<"LINE 1 "<<line1;
        qWarning()<<"LINE 2 "<<line2;

        //Replace line 1 & 2 with just line 2?

       inputFile.close();
    }
}

1 Ответ

0 голосов
/ 25 января 2019

Вы не можете вырезать что-либо с начала файла, не создав временный файл.

Итак

  • либо вы читаете весь файл как QString / QByteArray, обрезаете первую строку * и записываете обратно

или

  • вы открываете файл, находите смещение конца первой строки * и закрываете файл, затем открываете его снова, чтобы записать оставшиеся байты во временный файл и переименовать его в исходный.

[*] Либо используйте QTextStream :: readLine (), либо читайте байты, пока не найдете '\ n' или '\ r', в зависимости от вашей платформы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...