在Linux下Qt的使用QSettings对文件进行修改,断电再启动发现之前的改动并没有保存生效。
QSettings类的sync方法并不能立刻同步到磁盘上。
Qt的保存机制是先写到一个临时文件中,然后定时去同步到磁盘,所以不能实时生效。
这个没有在Qt上并没有找到合适的解决方案。
测试有两种方案
方案一
调用Linux系统的shell命令
system("sync");
这个方法是同步所有内存的信息,弊端懂得都懂哈。
方案二
使用C语言的方式再处理一遍
#include <unistd.h>
QSettings *s = new QSettings("xxx", xxxx);
/*……省略具体写操作……*/
s->sync();
QString path = "xxxxxxxx"//文件路径
QFile file(path);
file.open(QIODevice::ReadOnly);
QByteArray ba = file.readAll();
file.close();
FILE *fp;
fp = fopen(path.toUtf8().data(), "wt+");
fwrite(ba, 1, ba.size(), fp);
fflush(fp);
fsync(fileno(fp));
fclose(fp);
方案二处理方案亲测有效,但是肯定不是最优解,有其他方案的小伙伴,欢迎一起讨论哈