QT5.9实现数据存入dat文件并读取
最近工作需要将Can报文中部分数据提取出来,并存到dat文件(因为dat文件体积小),当需要数据分析的时候再从dat文件中提取出来,考虑到dat只能存二进制数据,使用QBytearray数据格式进行存储读取。
整个步骤分为:
1.将需要存储的数据变成bytearray数据,并获得数据长度
2.将bytearray数据依次写入dat文件中
3.打开dat文件,将二进制数据依次读出
代码如下:
/*初始化定义,以保存float数据为例 */
float fVar[150] ;//初始化变量赋值
int count = 0;
/*将所要保存的150个数据写入float数组*/
fVar[count++] = U1Value; // U1Value是所需要保存的数据
if(count == 150)
{
SaveDat();
fVar[149] = {0};
count = 0;
}
/*将float数组转换为bytearray数据并写入dat*/
void Window:: SaveDat()
{
QByteArray array;
int len_fVar = sizeof(fVar);
array.resize(len_fVar); //获取长度
memcpy(array.data(), &fVar, len_fVar); //将float数据转换为bytearray数据
QFile writeFile( QDateTime::currentDateTime().toString("yyyyMMdd") +".dat"); //保存的dat文件以当前日期命名,也可以自己命名
writeFile.open(QIODevice::WriteOnly|QIODevice::Append); //打开dat文件并写入
QDataStream out(&writeFile);
out << array.data();
writeFile.close();
}
/*打开dat文件并读取数据*/
QString datfilename = QFileDialog :: getOpenFileName(this,"open file","","text file(*.dat)");
QByteArray showt;
QFile readFile(datfilename);
readFile.open(QIODevice::ReadOnly);
QDataStream in(&readFile);
in >> showt; //将dat数据写出到showt中
float outIntVar[150];
memcpy(&outIntVar, showt.data(), 600); //将shuowt中的bytearray数据变为float数据
for (int i = 0;i<150;i++)
{
qDebug() << outIntVar[i]; //在控制台将150个数据依次打印
}
readFile.close();
整个代码经过测试可以很好的保存及读取数据,并且因为存储的是dat文件所以占用极低的存储空间,适用常规的本地数据存储及读取。