0

我有一个“sequence.dat”文件,其中包含垂直表示的“1”和“-1”(即:每个元素都在一行中)。我正在尝试按如下方式读取文件:

QFile sequence("Sequences.dat");
sequence.open(QIODevice::ReadOnly);
QByteArray data = sequence.readAll(); 
for(int i=0; i<29; i++){        
    signedNo[i] = data[i]; // debugging breaking point
}
sequence.close();

但是,在调试断点处,QByteArray“数据”包含“1,-,1,\n”而不是“1,-1”......

是否可以一次读取整行而不是单独读取每个字节?并且...如果没有,如何告诉“ readAll”函数避免“\n”(这不是最佳解决方案,因为我还想分别阅读“-1”而不是“-和1”)

4

2 回答 2

4

QFile::readAll()返回一个字节数组,其中包含文件的每个字节作为单独的元素。

对于您的用例,您需要逐行读取文件。

QFile 文档展示了一些如何做到这一点的方法,例如:

 QVector<int> elements;

 QFile sequence("Sequences.dat");
 if (!sequence.open(QIODevice::ReadOnly | QIODevice::Text))
     return;

 QTextStream in(&sequence);
 while (!in.atEnd()) {
     QString line = in.readLine();
     elements.append(line.toInt());
 }

尽管此示例来自 Qt 文档,但我建议检查返回值,当到达文件末尾时,in.readLine()该返回值为 null ,而不是使用.QStringatEnd()

于 2013-05-08T11:59:39.777 回答
2

您可以逐行阅读,并且可以在阅读该行后立即对其进行处理:

 i = 0;
 while (!sequence.atEnd()) {
     QByteArray line = sequence.readLine();
     signedNo[i] = line[i];
     i++;
 }
于 2013-05-08T12:00:04.210 回答