如何避免阅读" \ n"使用QFile :: readAll函数时

时间:2013-05-08 11:55:18

标签: c++ qt qfile

我有一个“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”分开)

2 个答案:

答案 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++;
 }