我有一个“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”分开)
答案 0 :(得分:4)
QFile::readAll()
返回一个字节数组,该数组包含文件的每个字节作为单独的元素。
对于您的用例,您需要逐行读取文件。
QFile documentation显示了一些方法,例如:
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()
的返回值,该值在文件末尾到达时返回空QString
,而不是使用atEnd()
。
答案 1 :(得分:2)
您可以逐行阅读,并且可以在阅读该行后立即处理:
i = 0;
while (!sequence.atEnd()) {
QByteArray line = sequence.readLine();
signedNo[i] = line[i];
i++;
}