首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Qt|实现解压资源并自动替换功能

最近开发的项目中需要这样一个功能:有些客户的工作环境是不需要网络的,那么,我们需要将资源数据以离线的方式操作。

这就涉及了这样一个功能:程序自动进行解压缩功能,并替换旧资源数据

在实现功能过程中,会有以下知识点需要掌握:

1:文件夹遍历功能实现。

2:文件解压缩方法实现。

3:数据读取实现(这里假设读取的是json文件)。

具体的实现流程:

1:获取需存储压缩包文件夹的绝对路径

该路径下可能会存在N个压缩包数据。

"ZipFiles":代表存储所有的压缩包的文件夹,也就是程序中需要获取的路径。

2:遍历解压压缩包

其实在这个功能中,会有这样的问题需要我们思考:

1:有些文件已经被解压过,有些文件未被解压,该如何区分呢?

2:该文件已经被解压过,又有一个压缩包,此时,需要删除就文件夹,更换成新解压的压缩包数据,该如何处理呢?

首先,拿到压缩包的文件夹后,需要遍历文件夹,采用:QDirIterator

qsFileName:是读取的数据路径。

根据该路径,我们需要判断 该路径是文件夹?压缩包?

在Qt中有一个特别方便的方法用于判断文件路径是否为文件夹,代码如下:

由此,我们就可以判断出哪些是已经被解析过的数据,哪些是需要解压缩的数据了。

在这里,只需要对压缩包文件进行解压缩处理,文件夹文件是不做该操作的。

对于解压缩操作,之前文章我有进行提过,这里不再详细说明了,有兴趣的可以看下面两个链接:

1:Qt编译QuaZip以及程序应用

2:Qt解压带有密码的加密文件

到这里,就该解决上面所说的两个问题了,具体操作流程,如下:

1:如果被解压的文件夹已经存在,需要先进行删除。这就保证了解压后的文件一定是最新文件夹,不存在替换功能,防止出错。

2:进行压缩包解压。

3:成功解压后,删除压缩包。

3:数据读取实现

这一步骤功能可以放到步骤二中同步进行,当时文件夹时,直接读取数据,当时压缩包时,先解压后读取数据。

有人又会提到前面步骤2中的第二个问题了,这里最最简单的方式就是让系统来帮我们处理。该如何操作呢?

采用map容器方式进行存储。

文件夹的名称作为key值。在map容器中,如何插入一条相同key值的数据,会将之前存储的value数据进行替换。

这样保证了逻辑的简单性,让系统帮我们存储最新的数据!

如此依赖,根据以上三个步骤,就可以实现解压缩文件并自动替换旧数据功能。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20230102A02BDZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券