QFile 忽略最后一个换行符

QFile ignoring last newline

本文关键字:换行符 最后一个 QFile      更新时间:2023-10-16

我正在使用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 worldrn
rn

我无法获取最后 rn 行的空字符串。我该如何解决这个问题?

根据 http://doc.qt.io/qt-4.8/qtextstream.html#readLine \r 总是被修剪。因此,您将在每一行阅读中都错过它们。您可以:

a) 使用readLine()后将行终止符添加到读取字符串

b) 使用QFiles.readLine()读取不接触读取字节的QByteArray

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

c) 使用另一种方法读取文件,例如 std::istream .有关等效getline,请参阅 http://www.cplusplus.com/reference/istream/istream/getline/。

我认为换行符将被剥离。请参阅 QTextStream 的 Qt 文档。

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