QFile忽略最后一个换行符

QFile ignoring last newline

我正在使用 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 行获取空字符串。我该如何解决?

我认为换行符会被删除。请参阅 QTextStream 的 Qt 文档。

您必须使用 readAll() 或如果换行符为空,请自行添加“\n\r”。

根据 http://doc.qt.io/qt-4.8/qtextstream.html#readLine \r\n 总是被修剪。所以你会在每一行阅读中错过它们。你可以:

a) 在使用 readLine()

后向读取的字符串添加行终止符

b) 使用 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