QT 使用QZipWriter进行文件压缩

目录

1、QZipWriter

2、主要功能

3、示例


1、QZipWriter

QZipWriter 是 Qt 提供的一个类,用于创建和管理 ZIP 文件。它属于 Qt 的 QtGui 模块,虽然在 Qt 6 中已经被移除,但在早期的 Qt 版本中,它被用作一种简便的方式来创建 ZIP 压缩包。QZipWriter 允许你创建一个 ZIP 文件,并向其中添加文件或目录。

2、主要功能

  • 创建 ZIP 文件:可以创建新的 ZIP 文件并向其中添加文件和目录。
  • 设置压缩策略:可以设置是否压缩文件。
  • 写入数据:可以向 ZIP 文件中写入任意数据。

3、示例

#include <QCoreApplication>
#include <QFile>
#include <QDir>
#include <QDebug>
#include <QTextStream>
#include <QFileInfo>
#include "qzipwriter_p.h"void addFileToZip(QZipWriter &zipWriter, const QString &filePath, const QString &zipPath) {QFile file(filePath);if (file.open(QIODevice::ReadOnly)) {QZipWriter::FileInfo fileInfo;fileInfo.isDir = false;fileInfo.isFile = true;fileInfo.filePath = zipPath;fileInfo.size = file.size();zipWriter.addFile(fileInfo.filePath, file.readAll());file.close();qDebug() << "Added file to zip:" << zipPath;} else {qWarning() << "Failed to open file for reading:" << filePath;}
}void addDirToZip(QZipWriter &zipWriter, const QString &dirPath, const QString &zipPath) {QDir dir(dirPath);if (!dir.exists()) {qWarning() << "Directory does not exist:" << dirPath;return;}QFileInfoList entries = dir.entryInfoList(QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot);for (const QFileInfo &entry : entries) {QString newZipPath = zipPath.isEmpty() ? entry.fileName() : zipPath + "/" + entry.fileName();if (entry.isDir()) {zipWriter.addDirectory(newZipPath);addDirToZip(zipWriter, entry.absoluteFilePath(), newZipPath);} else {addFileToZip(zipWriter, entry.absoluteFilePath(), newZipPath);}}
}int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);QString sourceDirPath = "path/to/source/folder";QString zipFilePath = "path/to/target/zipfile.zip";QFile zipFile(zipFilePath);if (!zipFile.open(QIODevice::WriteOnly)) {qWarning() << "Cannot open zip file for writing:" << zipFilePath;return -1;}QZipWriter zipWriter(&zipFile);zipWriter.setCompressionPolicy(QZipWriter::AutoCompress);addDirToZip(zipWriter, sourceDirPath, "");zipWriter.close();zipFile.close();qDebug() << "Folder successfully compressed to" << zipFilePath;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/14629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CMMI模型的分析

CMMI模型的分析 CMMI(Capability Maturity Model Integration,能力成熟度模型集成)是由美国卡内基梅隆大学软件工程研究所(SEI)开发的一个过程级改进训练和评估程序。CMMI模型为组织提供了一套综合的指南,用于改进其过程和提升性能。 CMMI 3.0是CMMI模型的最新版本,于…

AWS计算之AWS Elastic Beanstalk

AWS Elastic Beanstalk是一项用于简化应用程序部署和管理的托管服务。它允许开发人员上传他们的应用程序代码&#xff0c;并自动处理底层的部署、扩展、负载均衡和监控任务&#xff0c;从而使开发人员能够专注于应用程序的开发而不必担心基础架构的管理细节。 借助Elastic Bea…

机器学习300问】95、什么是KNN算法?它和K-means什么关系?

一、KNN算法的定义 KNN&#xff08;K-Nearest Neighbors&#xff09;算法&#xff0c;是一种简单而有效的监督学习方法。它既可以用在分类任务&#xff0c;也可用在回归任务中。KNN算法的核心思想&#xff1a;在特征空间中&#xff0c;如果有一个数据点周围的大多数邻居属于某个…

5. JVM面试题汇总

Java全栈面试题汇总目录-CSDN博客 1. 说一下JVM的主要组成部分及其作用? JVM包含两个子系统和两个组件&#xff0c;两个子系统为Class loader(类装载)、Execution engine(执行引擎)&#xff1b;两个组件为Runtime data area(运行时数据区)、Native Interface(本地接口)。 Cl…

linux mail命令及其历史

一、【问题描述】 最近隔壁组有人把crontab删了&#xff0c;crontab这个命令有点反人类&#xff0c;它的参数特别容易误操作&#xff1a; crontab - 是删除计划表 crontab -e 是编辑&#xff0c;总之就是特别容易输入错误。 好在可以通过mail命令找回&#xff0c;但是mai…

【计算机网络】初识Tcp协议

&#x1f4bb;文章目录 &#x1f4c4;前言Tcp基础概念Tcp 的报文格式三次握手四次挥手 Tcp的滑动窗口机制概念超时重传机制高速重传 TCP传输控制机制流量控制拥堵控制慢启动 Tcp的性能优化机制延迟应答捎带应答 &#x1f4d3;总结 &#x1f4c4;前言 TCP三次握手、四次挥手&…

Java刷题总结(面试)

1、String类 String不可变 java 中String是 immutable的&#xff0c;也就是不可变&#xff0c;一旦初始化&#xff0c;其引用指向的内容是不可变的。 也就是说&#xff0c;String str “aa”&#xff1b;str“bb”&#xff1b;第二句不是改变“aa”所存储地址的内容&#xf…

Overleaf是什么?如何升级到标准版OR专业版?

1. Overleaf介绍 Overleaf是一个使用LaTeX进行多人协同编辑的平台&#xff0c;可以免费注册和使用&#xff0c;不用下载LaTeX软件&#xff0c;是最为著名的LaTeX在线协作系统。 主要特色是有LaTeX插件&#xff0c;编辑功能十分完善&#xff0c;有实时预览&#xff08;即编即看…

Java 使用继承和重写父类方法写一个商品入库案例

package 练习.商品入库;import java.util.Scanner; // 抽象手机类 public abstract class Phone {//测试方法public static void main(String[] args){// 华为手机huawei h new huawei();h.setName("华为P40");h.setPrice(1999.99);h.setConfiguration("8128GB…

docker 安装 私有云盘 nextcloud

拉取镜像 # 拉取镜像 sudo docker pull nextcloud运行nextcloud 容器 # 内存足够可以不进行内存 --memory512m --memory-swap6g # 桥接网络 --network suixinnet --network-alias nextcloud \ sudo docker run -itd --name nextcloud --restartalways \ -p 9999:80 \ -v /m…

【排名公布】绵阳男科医院排名发布,绵阳高水男科医院究竟咋样啊?

【排名公布】绵阳男科医院排名发布&#xff0c;绵阳高水男科医院究竟咋样啊&#xff1f; 绵阳高水医院&#xff0c;是一家医保定点单位&#xff0c;地址位于绵阳市涪城区长虹大道北段113号。一所与国际接轨的现代化男子医院&#xff0c;有良好地就医环境,拥有多名有经验的专家…

基于Tensorflow实现了三个模型对MNIST数据集的识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与意义 MNIST手写数字数据集是计算机视觉和机器学习领域的一个经典数据集&#xff0c;常用于评估图像…

ubuntu安装文件

ubuntu如何安装deb文件? ubuntu离线安装deb文件的两种方法_系统工具_软件教程_脚本之家 1. 双击安装 2.命令安装 1.、我们打开终端窗口&#xff0c;然后先使用cd命令进入deb文件所在的目录&#xff0c;例如&#xff1a; cd ~/Downloads 2、接着我们就可以使用dpkg命令来安装这…

攻防世界-mobile-easy-app详解

序言 这道题网上很多分析&#xff0c;但是分析的都是arm版本的&#xff0c;我选了arm64的来分析&#xff0c;arm64相比arm难度高一些&#xff0c;因为arm64编译器搞了inline优化&#xff0c;看起来略抽象 分析 这道题逻辑很简单&#xff0c;输入flag然后一个check函数验证&a…

改进rust代码的35种具体方法-类型(十八)-不要惊慌

上一篇文章 它看起来非常复杂&#xff0c;这就是为什么它贴合的塑料盖上用大号友好字母印上“不要恐慌”的原因之一。——道格拉斯亚当斯 此项目的标题将更准确地描述为更喜欢返回Result而不是使用panic!&#xff08;但不要惊慌更吸引人&#xff09;。 Rust的panic机制主要是为…

算法入门----小话算法(1)

下面就首先从一些数学问题入手。 Q1&#xff1a; 如何证明时间复杂度O(logN) < O(N) < O(NlogN) < O(N2) < O(2N) < O(N!) < O(NN)? A&#xff1a; 如果一个以整数为参数的不等式不能很容易看出不等的关系&#xff0c;那么最好用图示或者数学归纳法。 很显…

Python3 笔记:sort() 和 sorted() 的区别

1、sort() 可以对列表中的元素进行排序&#xff0c;会改变原列表&#xff0c;之前的顺序不复存在。 list.sort&#xff08;key&#xff0c; reverse None&#xff09; key&#xff1a;默认值是None&#xff0c;可指定项目进行排序&#xff0c;此参数可省略。 reverse&#…

rmxprt转换的3D模型只有一半?---模大狮模型网

在3D建模和渲染的工作流程中&#xff0c;我们经常需要用到各种转换工具来兼容不同平台或软件之间的模型格式。rmxprt(或其他类似的模型转换工具)就是其中的一种&#xff0c;它能够将模型从一种格式转换为另一种格式。然而&#xff0c;有时在转换过程中可能会遇到一些问题&#…

微服务雪崩问题、Sentinel(请求限流、线程隔离、服务熔断)、Seata分布式事务

文章目录 前言一、微服务保护二、Sentinel2.1 微服务整合2.2 簇点链路2.3 请求限流2.4 线程隔离2.5 服务熔断 三、分布式事务3.1 Seata3.1.1 Seata架构3.1.2 部署TC服务3.1.3 微服务集成Seata 3.2 XA模式3.3 AT模式 前言 微服务之间为什么会雪崩&#xff1f;怎么解决雪崩问题&…

MySQL存储过程浅析

存储过程 定义&#xff1a; 存储过程是一组为了完成特定功能的SQL语句&#xff0c;是由一些SQL语句组成的代码块&#xff0c;这些代码块像方法一样实现一些功能&#xff08;对单表或多表的增删改查&#xff09;&#xff0c;然后给代码块起一个名字&#xff0c;用到的时候再调用…