使用QZipWriter来压缩文件

Qt 自带的压缩QZipWriter和解压QZipReader详解~含Demo-CSDN博客

示例代码1:

压缩一个文件:

#include "qzipwriter_p.h"
#include "qfileinfo.h"
#include <QDebug>
int main(int argc, char *argv[])
{QApplication a(argc, argv);QString m_savePath=QString::fromLocal8Bit("E:\\桌面\\");QString m_zipFile=QString::fromLocal8Bit("E:\\桌面\\文字.txt");QZipWriter* writer = new QZipWriter(m_savePath + "/QtZip1.zip");QZipWriter::CompressionPolicy policy = writer->compressionPolicy();qDebug() << "policy:" << policy;writer->setCompressionPolicy(QZipWriter::AutoCompress);QFile file(m_zipFile);if (!file.exists()) {return 0;}QFileInfo fileInfo(m_zipFile);file.open(QIODevice::ReadOnly);writer->addFile(fileInfo.fileName(), file.readAll());file.close();if (writer) {delete writer;writer = NULL;}return a.exec();
}

关键代码:

QZipWriter* writer = new QZipWriter(m_savePath + "/QtZip1.zip");

 writer->setCompressionPolicy(QZipWriter::AutoCompress);

 这句我不懂。。。

  writer->addFile(fileInfo.fileName(), file.readAll());

示例代码2:

压缩两个文件:

#include "qzipwriter_p.h"
#include "qfileinfo.h"
#include <QDebug>
void add_file(QString m_zipFile, QZipWriter* writer)
{QFile file(m_zipFile);if (!file.exists()) {return ;}QFileInfo fileInfo(m_zipFile);file.open(QIODevice::ReadOnly);writer->addFile(fileInfo.fileName(), file.readAll());file.close();
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);QString m_savePath=QString::fromLocal8Bit("E:\\桌面\\");QString m_zipFile=QString::fromLocal8Bit("E:\\桌面\\文字.txt");QString m_zipFile1 = QString::fromLocal8Bit("E:\\桌面\\文字2.txt");QZipWriter* writer = new QZipWriter(m_savePath + "/QtZip1.zip");QZipWriter::CompressionPolicy policy = writer->compressionPolicy();qDebug() << "policy:" << policy;writer->setCompressionPolicy(QZipWriter::AutoCompress);add_file(m_zipFile, writer);add_file(m_zipFile1, writer);if (writer) {delete writer;writer = NULL;}return a.exec();
}

示例代码3:

zip中添加目录:

    writer->addDirectory("lib");writer->addDirectory("lib2");

 结果:

示例代码4:

构建多级目录:

writer->addDirectory("lib/a/b");

结果:

 示例代码5:

多级目录+中文路径:

writer->addDirectory(QString::fromLocal8Bit("lib连/a连/b连"));

结果:

示例代码6:

void print_inform(QString path)
{QDir dir(path);dir.setFilter(QDir::Files |QDir::Dirs| QDir::NoDotAndDotDot);QStringList list=dir.entryList();qDebug() << list.count();for (int i = 0; i < list.count(); ++i){qDebug() << list[i];}
}

输出文件夹下的文件和文件夹(不进行递归)

    dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);

    只输出文件

     dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);

     只输出文件夹

递归打印文件夹:

void print_inform1(QString path)
{QDir dir(path);dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);QStringList list = dir.entryList();for (int i = 0; i < list.count(); ++i){QString path1 = path + "\\" + list[i];qDebug() << path1;}
}
void print_inform3(QString path)
{QDir dir(path);dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);QStringList list = dir.entryList();//qDebug() << list.count();for (int i = 0; i < list.count(); ++i){QString path1 = path + "\\" + list[i];qDebug() << path1;print_inform3(path1);//前面要加上前缀}print_inform1(path);
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);print_inform3(QString::fromLocal8Bit("E:\\桌面\\A"));return a.exec();
}

 递归压缩文件夹:

QZipWriter* writer;
QString first_str;
void add_file(QString m_zipFile)
{QFile file(m_zipFile);if (!file.exists()) {return ;}QFileInfo fileInfo(m_zipFile);file.open(QIODevice::ReadOnly);QString path2 =m_zipFile.right(m_zipFile.length() - first_str.length());//qDebug() << path2;writer->addFile(path2, file.readAll());file.close();
}
//压缩文件夹
//首先,得到所有的文件夹和文件void print_inform1(QString path)
{QDir dir(path);dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);QStringList list = dir.entryList();for (int i = 0; i < list.count(); ++i){QString path1 = path + "\\" + list[i];//qDebug() << path1;add_file(path1);}
}
void print_inform3(QString path)
{QDir dir(path);dir.setFilter(QDir::Dirs | QDir::NoDotAndDotDot);QStringList list = dir.entryList();//qDebug() << list.count();for (int i = 0; i < list.count(); ++i){QString path1 = path + "\\" + list[i];//qDebug() << path1;print_inform3(path1);//前面要加上前缀QString path2=path1.right(path1.length() - first_str.length());//qDebug() << path2;writer->addDirectory(path2);}print_inform1(path);
}
int main(int argc, char *argv[])
{QApplication a(argc, argv);//1.savePath   2.folderPath //注意:savePath结尾为\\//folderPath结尾不是\\QString m_savePath = QString::fromLocal8Bit("E:\\桌面\\B\\");QString m_folderPath = QString::fromLocal8Bit("D:\\Release\\app\\FeiQ");int m=m_folderPath.lastIndexOf('\\')+1;first_str = m_folderPath+"\\";qDebug() << first_str;QString zip_name = m_folderPath.right(m_folderPath.length() - m);qDebug() <<zip_name;writer = new QZipWriter(m_savePath + "/"+zip_name+".zip");QZipWriter::CompressionPolicy policy = writer->compressionPolicy();//qDebug() << "policy:" << policy;writer->setCompressionPolicy(QZipWriter::AutoCompress);print_inform3(m_folderPath);if (writer) {delete writer;writer = NULL;}return a.exec();
}

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

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

相关文章

机器学习8-决策树

决策树&#xff08;Decision Tree&#xff09;是一种强大且灵活的机器学习算法&#xff0c;可用于分类和回归问题。它通过从数据中学习一系列规则来建立模型&#xff0c;这些规则对输入数据进行递归的分割&#xff0c;直到达到某个终止条件。 决策树的构建过程&#xff1a; 1.…

1、卷积分类器

用 Kera 创建你的第一个计算机视觉模型。 数据集下载地址:链接:https://pan.quark.cn/s/f9a1428cf6e3 提取码:XJcv 文章目录 欢迎来到计算机视觉!简介卷积分类器训练分类器示例 - 训练一个卷积分类器步骤1 - 加载数据步骤2 - 定义预训练基步骤3 - 附加头步骤4 - 训练结论欢…

Composition Local

1.显示传参 package com.jmj.jetpackcomposecompositionlocalimport org.junit.Testimport org.junit.Assert.*/*** 显示传参*/ class ExplicitText {private fun Layout(){var color:String "黑色";//参数需要通过层层传递&#xff0c;比较繁琐Text(color)Grid(c…

考研数据结构笔记(2)

线性表 线性表的定义线性表的基本操作lnitList(&L)DestroyList(&L)Listlnsert(&L,i,e)ListDelete(&L,i,&e)LocateElem(L,e)GetElem(L,i)Length(L)PrintList(L)Empty(L)Tips:引用值 小结 根据数据结构的三要素–逻辑结构、数据的运算、存储结构&#xff0c;…

【Linux】SystemV IPC

进程间通信 一、SystemV 共享内存1. 共享内存原理2. 系统调用接口&#xff08;1&#xff09;创建共享内存&#xff08;2&#xff09;形成 key&#xff08;3&#xff09;测试接口&#xff08;4&#xff09;关联进程&#xff08;5&#xff09;取消关联&#xff08;6&#xff09;释…

攻防世界 CTF Web方向 引导模式-难度1 —— 1-10题 wp精讲

目录 view_source robots backup cookie disabled_button get_post weak_auth simple_php Training-WWW-Robots view_source 题目描述: X老师让小宁同学查看一个网页的源代码&#xff0c;但小宁同学发现鼠标右键好像不管用了。 不能按右键&#xff0c;按F12 robots …

GEE Colab——如何利用Matplotlib在colab中进行图形制作

在colab中绘制图表 笔记本的一个常见用途是使用图表进行数据可视化。Colaboratory 提供多种图表工具作为 Python 导入,让这一工作变得简单。 Matplotlib Matplotlib 是最常用的图表工具包,详情请查看其文档,并通过示例获得灵感。 线性图 线性图是一种常见的图表类型,用…

8个简约精美的WordPress外贸网站主题模板

Simplify WordPress外贸网站模板 Simplify WordPress外贸网站模板&#xff0c;简洁实用的外贸公司wordpress外贸建站模板。 查看演示 Invisible Trade WP外贸网站模板 WordPress Invisible Trade外贸网站模板&#xff0c;做进出口贸易公司官网的wordpress网站模板。 查看演…

Jupyter Notebook如何在E盘打开

Jupyter Notebook如何在E盘打开 方法1&#xff1a;方法2&#xff1a; 首先打开Anaconda Powershell Prompt, 可以看到默认是C盘。 可以对应着自己的界面输入&#xff1a; 方法1&#xff1a; (base) PS C:\Users\bella> E: (base) PS E:\> jupyter notebook方法2&#x…

CTFSHOW命令执行web入门29-54

description: >- 这里就记录一下ctfshow的刷题记录是web入门的命令执行专题里面的题目,他是有分类,并且覆盖也很广泛,所以就通过刷这个来,不过里面有一些脚本的题目发现我自己根本不会笑死。 如果还不怎么知道写题的话,可以去看我的gitbook,当然csdn我也转载了我自己的…

【RabbitMQ(一)】:基本介绍 | 配置安装与快速入门

应该是新年前最后一篇博客了&#xff0c;明天浅浅休息一下&#xff0c;提前祝大家新年快乐捏&#xff01;&#x1f60a;&#x1f60a;&#x1f60a; 01. 基础理解 1.1 同步调用和异步调用 &#x1f449; 同步调用 的时候调用者会 阻塞 等待被调用函数或方法执行完成&#xff…

C语言一招教你搞定所有基础函数知识(上)

1.前言 Hello&#xff0c;大家好&#xff0c;我是小陈&#xff0c;新年快乐呀&#xff01;马上就龙年了&#xff0c;今天是大年30&#xff0c;祝各位新的一年更上一层楼&#xff0c;今天小陈为大家带来了C语言的函数基础知识&#xff0c;希望大家仔细看完。 2.函数的概念 何…