QFile忽略了上一个换行符

时间:2016-07-13 09:48:51

标签: c++ qt qfile qtextstream

我正在使用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 个答案:

答案 0 :(得分:0)

我认为新行将被剥夺。请参阅QTextStream的Qt文档。

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

答案 1 :(得分:0)

根据here \ r \ n总是被修剪。因此,您会在每个读取行中错过它们。你可以:

a)使用readLine()

后,在读取字符串中添加行终止符

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

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

c)使用另一种方法来阅读文件,例如: std::istream。有关等效的getline,请参阅here