Qt on Android - 解决QFile关闭文件后立即断电,文件丢失,数据未保存问题

QT 文件 自定义数据结构:定义需要序列化和反序列化的数据结构。重载操作符:重载QDataStream的<<和>>操作符,以便能够序列化和反序列化自定义数据结构。设置版本:使用setVersion方法设置QDataStream的版本,以确保兼容性。文件操作:使用QFile打开文件进行读写操作,并使用QDataStream进行数据的序列化和反序列化。 阅读详情

现象

使用QFile类写数据到文件后,调用close()方法关闭并保存文件。

之后设备立即断电,重启后发现该文件并未成功保存,文件里的数据仍是以前的数据。

经检查,打开、写入都是成功的。

 

 

原因

Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。

因此如果调用close()方法后设备立即断电,会产生实际数据并未保存在硬盘中的现象。

 

 

解决过程中遇到的问题

经查Qt帮助文档,发现QFile的父类QFileDevice有一个方法:flush()

bool QFileDevice::flush()
Flushes any buffered data to the file. Returns true if successful; otherwise returns false.

看说明是将缓存的数据写入到文件的意思。

因此尝试在close()之前先flush()。

但经测试后发现并不可靠,还是利用Linux的系统函数fsync(int fd)来解决吧。

fsync

QTQFile类的使用 详细说明 QFile类提供用于读取和写入文件的接口。 QFile是用于读取和写入文本以及二进制文件和资源的I / O设备。 QFile可以单独使用,或者更方便地与QTextStream或QDataStream一起使用。 文件名通常在构造函数中传递,但是可以随时使用setFileName()进行设置。 QFile希望文件分隔符为’/’,而不管操作系统是什么。不支持使用其他分隔符(例如’’)。 您可以使用exist()检查文件是否存在,并使用remove()删除文件。 (与更高级的文件系统相关的操作由QFile 阅读详情

相关推荐

AI编程工具到底是初学者的绊脚石还是垫脚石?

现在是AI时代,我们要做的,是学会拥抱AI、使用AI,成为AI的驾驭者,如果你因为害怕使用AI学不到东西,那么大可不必,因为AI必然是今后的趋势,相信会用AI在今后的求职面试中也会有很大的占比。另外我之前写了多篇有关AI编程开发工具Trae的使用技巧和教程,需要的话你可以关注公众号后通过菜单栏获取。另外我也把所有Trae相关的文章整合到了腾讯ima知识库,感兴趣的可以关注公众号以后回复。

cpp加油站的专栏 166

解决Qt中QSettings在断电时参数丢失问题

QSettings在存取配置文件时,存在写延时问题,有时断电会出现参数丢失,先改用封装Windows下的WritePrivateProfileStringA函数来替代QSettings的相关操作。

量化交易 米筐 因子分组打分(成长因子)

分组动手练习 在米筐上因子数据没有处理,提供的很多因子没有默认分类,存在一些因子没有的情况,我们就选择一些常见的因子。 价值因子 质量因子 成长因子(历史名称) pe_ratio return_on_invested_capital in_revenue pcf_ratio du_return_on_equity inc_eps pb_ratio return_on_asset_net_profit inc_total_asset market_cap return_on_equ

廷益_飞鸟的博客 918

Qt QSettings断电保存:sync()

Qt QSettings断电保存:sync()

ken2232的博客 1590

QFile+QSettings+fsync解决Linux断电数据丢失

查询N多资料自创方法,希望对你有帮助 QString dir = QCoreApplication::applicationDirPath() + "/system_config/system_data.ini"; QFile SFile(dir); if(!SFile.open(QIODevice::ReadWrite | QIODevice::Text)) { // 文件打开失败 qDebug()<<"config fil.

MFgming的博客 3024

QtQFile

QFile 类是操作文件的输入输出设备类。QFile是一个用来读写二进制文件与文本文件的输入输出设备。

QtCompany的博客 717

android 设备写入文件立即断电重启后,文件丢失数据没有保存

android 设备写入文件立即断电重启后,文件丢失数据没有保存

u011774634的博客 1744

qt中关于文件的操作

基本用法QFile类是一个操作文件的输入/输出设备。QFile是用来读写二进制文件和文本文件的输入/输出设备。QFile可以自己单独被使用,但是如果和QDataStream或QTextStream一起使用将更加方便。文件名通常可以通过构造函数来传递,但也可以使用setName()来设置。你可以通过exists() 来检查一个文件是否存在并且可以通过remov

xiaoyangger的专栏 1万+

Qt QFile::copy创建文件问题

一 定义 看一下Qt assistant上关于QFile::copy的说明(Qt5.9.2): bool QFile::copy(const QString &amp;newName) Copies the file currently specified by fileName() to a file called newName. Returns true if successful; ...

程序员Link 9742

QFile::copy使用陷阱

之前在使用copy时发现不管怎么使用返回值都为false,已经检查出现文件已存在的问题,经过不断尝试,发现copy在复制时不会创建不存在的文件夹,导致复制时出错,正确使用方法: QString filePath; QString newFilePath; //皆为文件的绝对路径 例如:D:/1/2/3.jpg QStringList pathList=newFilePath.split("/");//用于检查新路径是否存在 QString dir; for(int i;i<pathList.si

qq_40976149的博客 8766

QT-实现拷贝文件文件夹(QFile::copy)

QT-实现拷贝文件文件夹(QFile::copy)

weixin_45590571的博客 9345

Linux+Qt不正常断电导致文件内容和数据库不能成功存储

记录昨天遇到的一个问题,在linux保存文件内容突然间断电导致文件内容没有及时同步到硬盘的问题,以及在修改数据库修改成功的同时,断电没能成功存储到数据库表格中。 解决办法: 1、文件的处理 利用fsync函数同步内存中所有已修改的文件数据到储存设备,fsync可用于数据库这样的应用程序,这种应用程序需要确保将修改过的块立即写到磁盘上。 2、数据库处理 同样可以适用于数据库,在数据库操作完成后,调用fsync()函数或者sync()函数,sync函数只是将所有修改过的块缓冲区排入写队列,然后就返

Monkey_lwx的博客 1794

Linux Qt 保存文件后立刻关机导致保存失败!

Qt开发过程中,遇到按键关机请求,槽函数中,需要保存系统配置文件,然后立刻关机。 重启系统,发现保存失败,原因在于配置文件并没有写到磁盘等存储介质上,正确的处理方式为: QFile::close()函数并不能保证文件被写进磁盘,需要用函数fsync()来同步文件到磁盘。   #include &lt;unistd.h&gt; #include &lt;QFile&gt; /* 以下为...

翻墙的老王 1260

QFile类使用

QFileQt中提供的文件I/O操作类,它支持在Windows、MacOS和Linux等操作系统下操作文件。使用QFile可以方便地读取、写入和处理文件,同时还能检查文件的大小、相关属性和状态等。

zw_ggr_2017的博客 3333

QFile 总结

void QFile::flush () [虚] 刷新文件缓存到磁盘。close() 也刷新文件缓存。

u013639526的专栏 3156

Qt 文件类实战:解锁文件操作的无限可能 (***)

Qt 文件类实战:解锁文件操作的无限可能

ken2232的博客 884

QFile自动close功能问题分析

bool open(FILE *fh, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) bool open(int fd, QIODevice::OpenMode mode, QFileDevice::FileHandleFlags handleFlags = DontCloseHandle) QFile的open函数中,第三个参数QFileDevice::FileHandleF..

lichao_n的博客 1964

QT基础知识3——文件操作:QFile

优点:平台无关性、面向对象设计、与Qt生态无缝集成、完善的错误处理机制、支持文本和二进制操作、提供异步I/O能力。缺点:相比C/C++原生文件操作有轻微性能开销,学习曲线较陡(对于已有C/C++基础的开发者)。适用场景:所有Qt项目,特别是需要跨平台、需要与其他Qt类集成、需要异步操作的场景。建议:优先使用QFile进行文件操作,避免直接使用C/C++原生文件函数。对于简单脚本或性能敏感的底层代码,可考虑原生函数。

honev.blog.csdn.net 1894

ADM2682E-隔离式RS-485数据收发器-中文数据手册.pdf

ADM2682E-隔离式RS-485数据收发器-中文数据手册.更多中文数据手册,请访问:https:dspdf.yicp.fun

上一篇: Qt5.11新特性-QML新解析流程
下一篇: 针对使用WordPress搭建个人博客的Nginx的配置文件的修改
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值