我从
串口采集
数据,每秒采集4组,每组6个字节,然后把数据存在SD卡中。
现在打开文件的方式为:file.open(QIODevice::WriteOnly | QIODevice::Append);
每次写完一组数据后,用file.flush();刷新缓冲区。但是
存储了一段时间后,发现缓冲区没及时刷新,如:存储两个小时后读取数据,只有1个半小时的数据,再过一段时间读取,才有后来半个小时的数据。如果不调用file.flush();的话只能关闭文件的时候才能刷新缓冲区。请问是存储的数据量大吗?但是存储9个小时才1M的数据量,我采用的是数据流的方式存储在二进制文件中,我试着转储一个20M的文件才1分钟,但是提示转储完成后还要等几分钟才能将缓冲区的数据写入SD卡。
请问是什么原因呢?怎么能解决呢?这样存储数据的话每天都要丢一
部分数据。
如改为 file.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Unbuffered );方式后,不用加file.flush();也可保存数据,但仍出现以上
问题。
存储数据代码为:
- void MainWindow::save_com_file(unsigned char f)
- {
- now_time=QTime ::currentTime();
- QDataStream save(&file_name[f]);
- save<<now_time;
- save << jdq_data[f].new_data;}