1

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

4

2 回答 2

0

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

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

于 2016-07-13T09:56:18.103 回答
0

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

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

b)QFiles.readLine()用于读入QByteArray不接触读取字节的a:

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

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

于 2016-07-13T10:33:48.370 回答