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' самостоятельно.