读取文本的Qt程序在多行文件中只能看到一行

时间:2017-11-16 18:37:05

标签: c++ qt qt5 qtextstream

我编写了一个程序来读取文本文件中每行一个整数分数序列。该文件有一个需要跳过的标题。 尽管盯着这个程序,它只能看到第一行(标题),然后表现得好像最后一行。

#include <QCoreApplication>
#include <QString>
#include <QTextStream>
#include <QDebug>
#include <QFile>

bool readScores(QString path)
{
  int line_count = 0;
  QFile qFile(path);
  if(!qFile.exists())
    {
      qDebug()<<"path does not exist:" << path;
      return false;
    }
  if(!qFile.open(QIODevice::ReadOnly|QIODevice::Text)){
      qDebug("open fails");
      return false;
    }
  QTextStream ts(&qFile);
  qDebug()<<ts.readLine();// just read the head...
  while(!qFile.atEnd())
    {
      line_count++;
      int score;
      QTextStream tsLine;
      QString line = ts.readLine(512);
      tsLine.setString(&line);
      tsLine >> score;
      qDebug()<<"Just read"<<score;
    }
  qDebug()<<"found "<<line_count<<" lines";
  qFile.close();
  return true;
}

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);
  readScores("e:/tmp/scores.txt");
  return a.exec();
}

以下是scores.txt的内容:

just test data
69
48
38
2
5
1
1
4

这是节目的输出

"just test data"
found  0  lines

你能看出为什么程序没有看到8行分数吗? 我在使用Mingw32的Windows上使用Qt 5.3.1

1 个答案:

答案 0 :(得分:2)

当您使用QTextStream时,您不应再使用QFile:

bool readScores(QString path)
{
    [...]
    QTextStream ts(&qFile);
    qDebug()<<ts.readLine();// just read the head...
    QString line;
    do
    {
        line = ts.readLine();
        bool ok;
        int score = line.toInt(&ok);
        if(ok){
            qDebug()<<"Just read"<<score;
            line_count++;
        }
    }
    while (!line.isNull());
    qDebug()<<"found "<<line_count<<" lines";
    qFile.close();
    return true;
}