数据中心类DataCenter(三)

ops/2024/11/14 16:53:06/

数据中心类DataCenter(三)

前言

在上一集,我们就完成了整个数据中心类的构造函数以及析构函数,我们讨论了我们的数据持久化的相关事宜,那么我们这一集就要来完成这一个内容。

需求分析

我们需要暂且就规定我们的路径为系统目录的路径(Qt内置函数)+ ChatClient.json这个文件。

我们就需要写三个函数,一个是用于初始化数据文件的方法,一个用于写入文件数据的方法,一个用于读文件数据的方法。

initDataFile

我们要使用QStandardPaths这个Qt内置的类获取到我们当前电脑的系统目录的AppData文件下的Roaming/ChatClient路径

void DataCenter::initDataFile()
{//构造文件的路径,使用系统目录AppData"QString basePath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);QString filePath = basePath + "/ChatClient.json";//LOG() << "filePath=" << filePath;//判断是否存在QDir dir;if(!dir.exists(basePath)){dir.mkpath(basePath);}//构造好了文件路径就创建出来//写方式QFile file(filePath);if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){LOG() << "打开文件失败!" << file.errorString();return;}//打开成功,写入初始内容QString data = "{\n}";file.write(data.toUtf8());file.close();
}

我们要先检查一下文件/目录是否存在,不存在就要我们创建这个文件/目录。这里我们也是使用了Qt内置的QDir类

saveDataFile

这里就要开始正式使用我们的JSON了

void DataCenter::saveDataFile()
{QString filePath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/ChatClient.json";QFile file(filePath);if(!file.open(QIODevice::WriteOnly | QIODevice::Text)){LOG() << "打开文件失败!" << file.errorString();return;}//按照json格式写入数据QJsonObject jsonObj;jsonObj["loginSessionId"] = loginSessionId;QJsonObject jsonUnread;for(auto it = unreadMessageCount->begin(); it != unreadMessageCount->end(); ++it){jsonUnread[it.key()] = it.value();}jsonObj["unread"] = jsonUnread;//写入文件QJsonDocument jsonDoc(jsonObj);QString s = jsonDoc.toJson();file.write(s.toUtf8());//关闭文件file.close();
}

我们要嵌套JSON来保存未读信息的内容。写入文件的时候就要使用QJsonDocument。

loadDataFile

这个是比较关键的一个内容,我们在整个DataCenter被实例化的时候就要被调用执行,所以我们就要在DataCenter的构造函数里面添加一行这个方法。

void DataCenter::loadDataFile()
{//确保加载之前,针对文件进行初始化QString filePath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation) + "/ChatClient.json";//判定文件是否存在,初始化QFileInfo fileInfo(filePath);if(!fileInfo.exists()){initDataFile();}//读方式打开文件QFile file(filePath);if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){LOG() << "打开文件失败!" << file.errorString();return;}//读取文件内容,解析成json对象QJsonDocument jsonDoc = QJsonDocument::fromJson(file.readAll());if(jsonDoc.isNull()){LOG() << "解析JSON文件失败!JSON文件格式错误!";file.close();return;}QJsonObject jsonObj = jsonDoc.object();this->loginSessionId = jsonObj["loginSessionId"].toString();LOG() << "loginSessionId=" << loginSessionId;//先清空unreadMessageCountthis->unreadMessageCount->clear();QJsonObject jsonUnread = jsonObj["unread"].toObject();for(auto it = jsonUnread.begin(); it != jsonUnread.end(); ++it){this->unreadMessageCount->insert(it.key(),it.value().toInt());}file.close();
}

最后要清空unreadMessageCount再读取文件里的内容,记得insert的时候,要把后面的value给转成int,我们存放的是未读信息的条数。

运行代码

main.c里面添加以下代码即可

    //debugmodel::DataCenter* dataCenter = model::DataCenter::getInstance();dataCenter->initDataFile();dataCenter->saveDataFile();

我们运行后就可以发现

点击进去~

就可以看到我们的内容了,也就说明我们的数据持久化成功了。

那么这一集就先到这里。


http://www.ppmy.cn/ops/132942.html

相关文章

springboot快递物流管理系统-计算机设计毕业源码85178

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 快递物流管理系统分析 2.1 可行性分析 2.1.1 技术可行性分析 2.1.2 经济可行性分析 2.1.3 操作可行性分析 2.2 系统流程分析 2.2.1数据增加流程 2.2.2 数据修改流程 2.2.3 数据…

PCD文件(Point Cloud Data)详细解析

PCD文件&#xff08;Point Cloud Data&#xff09;详细解析 PCD文件格式是专为存储和处理三维点云数据而设计的&#xff0c;由开源项目Point Cloud Library&#xff08;PCL&#xff09;引入。该格式广泛应用于机器人视觉、计算机视觉以及三维建模等领域&#xff0c;支持多种数…

一文详解@Async注解

背景 Java中的Async注解是Spring框架提供的一个功能强大的异步执行注解&#xff0c;它允许开发者将某些方法的执行异步化&#xff0c;从而提高应用程序的响应性能和吞吐量。 使用方法 要使用Async注解&#xff0c;首先需要在配置类上添加EnableAsync注解&#xff0c;以启用Spri…

github信息收集规则

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 github信息收集 github信息收集 •site:Github.com password•site:Github.com ftp ftppassword •site:Github.com 密码 •site:Github.com 内部 •in:name test …

深度学习之卷积问题

1 卷积在图像中有什么直观作用 ​ 在卷积神经网络中&#xff0c;卷积常用来提取图像的特征&#xff0c;但不同层次的卷积操作提取到的特征类型是不相同的&#xff0c;特征类型粗分如表1所示。 ​ 表1 卷积提取的特征类型 卷积层次特征类型浅层卷积边缘特征中层卷积局部特征深…

react-router-dom中的几个hook

useLocation useLocation钩子返回当前的location对象。 useLocation相关的属性&#xff1a; pathname:当前URL的路径部分&#xff08;如/about&#xff09;search:URL的查询字符串&#xff08;如?nameJohn&#xff09;hash:URL的哈希片段&#xff08;如#section1&#xff09…

【MySQL】深度学习与解析 : 库的操作知识整合

MySQL是一种开源的关系型数据库管理系统&#xff0c;被广泛应用于各种应用软件中。在深度学习中&#xff0c;MySQL可以用于存储和管理大量的数据&#xff0c;如训练数据、模型参数等。以下整理了一些MySQL库的操作知识&#xff1a; 1. 创建数据库&#xff1a; CREATE DATABA…

Python 自动化运维持续优化与性能调优

Python 自动化运维持续优化与性能调优 目录 ⚙️ 运维工具与系统的性能监控与优化&#x1f9d1;‍&#x1f4bb; 使用 Python 进行性能分析&#xff08;cProfile、line_profiler 等&#xff09;&#x1f4ca; 自动化性能测试与基准测试⚡ 高效资源调度与负载均衡策略&#x1…