QFile игнорирует последний перевод строки

Я использую Qt для чтения файла

  std::vector<QString> text;

  QFile f(file);
  if (f.open(QFile::ReadWrite | QFile::Text) == false)
    throw my_exception();

  QTextStream in(&f);
  QString line;
  while(!in.atEnd()) {
    line = in.readLine();

    text.push_back(line);
  }
  f.close();

проблема с этим подходом заключается в следующем: я не могу прочитать дополнительные символы новой строки в конце файла.

Предположим, у меня есть следующий текстовый файл

Hello world\r\n
\r\n

Я не могу получить пустую строку для последнего \r\n линия. Как я могу решить это?

2 ответа

Решение

Согласно http://doc.qt.io/qt-4.8/qtextstream.html \r\n всегда обрезаются. Таким образом, вы будете пропускать их в каждой строке чтения. Вы могли бы:

а) Добавить терминаторы строки в прочитанные строки после использования readLine()

б) использовать QFiles.readLine() читать в QByteArray который не касается прочитанных байтов:

while (!f.atEnd()) {
    QByteArray line = f.readLine();
    process_line(line);
}

c) Используйте другой подход для чтения файла, например, std::istream, Смотрите http://www.cplusplus.com/reference/istream/istream/getline/ для эквивалентной getline,

Я думаю, что новые строки будут удалены. Смотрите документацию Qt для QTextStream.

Вы должны использовать readAll() или, если новая строка пуста, добавить '\n\r' самостоятельно.

Другие вопросы по тегам