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.pswp.cn/web/14629.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14629.shtml
英文地址,請注明出處:http://en.pswp.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;用到的時候再調用…