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