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 file open fail";
    }
    else
    {
        // 文件处理
        qDebug()<<"path name: "<<SFile.objectName();

//        QString dir = QCoreApplication::applicationDirPath();
        QSettings *configIniWrite = new QSettings(dir, QSettings::IniFormat);
        configIniWrite->setValue(strkey, strvalue);
        delete configIniWrite;
    }
    //...解决Linux断电ini文件数据丢失
    SFile.flush();//函数将用户缓存中的内容写入内核缓冲区
    fsync(SFile.handle());//将内核缓冲写入文件(磁盘)
    SFile.close();
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
`QFile`是一个在Qt库中用于操作文件的类,它并不直接包含特定的数据结构,而是提供了一系列功能供用户操作文件、目录等。不过,在理解`QFile`如何与数据结构交互方面,我们可以从以下几个角度来进行阐述: ### 文件读取与存储 1. **内存缓冲区**:当通过`QFile`进行文件读写操作时,底层通常会涉及到内存缓冲区(如系统提供的缓存)。例如,在读取文件内容到内存中时,系统可能会将一定大小的数据块加载到内存中以便快速访问。 2. **流**:`QFile`可以被视为一种抽象的数据流。当你打开文件并进行读写操作时,实际上是在处理字节流。在C++中,这对应于`std::ifstream`, `std::ofstream`等类,它们都基于基本的输入输出流概念,而这种流的概念可以从更基础的C语言标准库中找到,如`FILE*`类型的指针。 3. **内存映射文件**:对于大文件的操作,尤其是需要对整个文件进行随机访问的情况,Qt提供了`QTextStream`和`QDataStream`等工具,这些工具可以有效地利用操作系统级别的内存映射技术来提高性能,避免一次性读入大量数据导致的内存压力。 4. **序列化/反序列化**:在数据管理过程中,`QFile`可以配合Qt的序列化框架(比如`QDataStream`),用于将数据转换成二进制形式存储到文件中,以及从文件中恢复数据。这一过程涉及复杂的数据结构管理,包括类的成员变量的存储和恢复。 5. **文件索引结构**:虽然`QFile`本身并不包含具体的文件索引结构,但在实际应用中,为了高效地搜索或定位文件内的特定内容,开发者可能会构建自己的索引结构,如B树、哈希表等。这些外部结构通常用于加速文件内容的查找和检索。 总之,尽管`QFile`本身并不直接包含特定的数据结构,但它与多种数据结构和抽象概念紧密关联,这些概念在文件管理和数据操作的过程中扮演着重要角色。通过合理选择和使用合适的内部机制以及外部数据结构,可以显著提升应用程序的性能和效率。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值