QT 使用QZipReader 進行文件解壓縮

目錄

1、QZipReader 概述

2、解壓示例

3、說明


1、QZipReader 概述

QZipReader 是一個方便的工具,用于在 Qt 應用程序中解壓 ZIP 壓縮包。它提供了讀取 ZIP 文件的接口,并能提取其中的內容。以下是如何使用 QZipReader 解壓 ZIP 文件的示例代碼:

  1. 導入必要的庫: 你需要確保你的項目中已經包含了 QtCoreQtGui 模塊。如果你沒有 QZipReader,你可能需要下載或實現一個類似功能的類。

  2. 創建 QZipReader 對象并讀取 ZIP 文件: 首先,你需要創建一個 QZipReader 對象,并使用它讀取 ZIP 文件。

  3. 解壓文件: 使用 QZipReader 提供的方法將文件解壓到指定目錄。

2、解壓示例

#include <QtCore/QCoreApplication>
#include <QtCore/QFile>
#include <QtCore/QDir>
#include <QtCore/QDebug>
#include <QtCore/QIODevice>
#include "qzipreader_p.h"void extractZip(const QString &zipFilePath, const QString &outputDirPath) {// 打開 ZIP 文件QFile zipFile(zipFilePath);if (!zipFile.open(QIODevice::ReadOnly)) {qWarning() << "無法打開ZIP文件:" << zipFilePath;return;}// 創建 QZipReader 對象QZipReader zipReader(&zipFile);if (!zipReader.isReadable()) {qWarning() << "無法讀取ZIP文件:" << zipFilePath;return;}// 創建輸出目錄QDir outputDir(outputDirPath);if (!outputDir.exists()) {outputDir.mkpath(".");}// 獲取 ZIP 文件中的文件信息const QList<QZipReader::FileInfo> fileInfoList = zipReader.fileInfoList();for (const QZipReader::FileInfo &fileInfo : fileInfoList) {if (fileInfo.isFile) {// 提取文件QString filePath = outputDirPath + "/" + fileInfo.filePath;QFile outFile(filePath);if (outFile.open(QIODevice::WriteOnly)) {outFile.write(zipReader.fileData(fileInfo.filePath));outFile.close();qDebug() << "解壓文件:" << filePath;} else {qWarning() << "無法創建文件:" << filePath;}} else if (fileInfo.isDir) {// 創建目錄QDir().mkpath(outputDirPath + "/" + fileInfo.filePath);qDebug() << "創建目錄:" << outputDirPath + "/" + fileInfo.filePath;}}
}int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);QString zipFilePath = "path/to/your/zipfile.zip";QString outputDirPath = "path/to/your/outputdir";extractZip(zipFilePath, outputDirPath);return app.exec();
}

3、說明

  1. QZipReader 類: 這個示例使用了一個名為 QZipReader 的類,你可能需要從 Qt 源碼或其他來源獲取這個類的實現(例如 Qt Solutions 中的 QZipReader)。

  2. 打開 ZIP 文件: 使用 QFile 打開 ZIP 文件,并傳遞給 QZipReader

  3. 創建輸出目錄: 檢查輸出目錄是否存在,如果不存在則創建。

  4. 讀取并解壓文件: 遍歷 ZIP 文件中的所有文件和目錄,分別進行處理。如果是文件,則讀取數據并寫入到輸出目錄。如果是目錄,則創建對應的目錄結構

  5. 還可以使用以下接口快速解

 zipReader.extractAll(destPath);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14245.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14245.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14245.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

List、IList、ArrayList 和 Dictionary

List 類型: 泛型類命名空間: System.Collections.Generic作用: List<T> 表示一個強類型的對象列表&#xff0c;可以通過索引訪問。提供了搜索、排序和操作列表的方法。特點: 類型安全&#xff0c;性能較好&#xff0c;適用于需要強類型和高效操作的場景。例子: List<…

每日一練 - BGP Keepalive 報文詳解

01 真題題目 關于 BGP 的 Keepalive 報文消息的描述,錯誤的是&#xff1a; A.Keepalive 周期性的在兩個 BGP 鄰居之間發送 B.缺省情況下,Keepalive 的時間間隔是 180s C.Keepalive 報文主要用于對等路由器間的運行狀態和鏈路的可用性確認 D.Keepalive 報文的組成只包含一個…

Web安全:SQL注入之時間盲注原理+步驟+實戰操作

「作者簡介」&#xff1a;2022年北京冬奧會網絡安全中國代表隊&#xff0c;CSDN Top100&#xff0c;就職奇安信多年&#xff0c;以實戰工作為基礎對安全知識體系進行總結與歸納&#xff0c;著作適用于快速入門的 《網絡安全自學教程》&#xff0c;內容涵蓋系統安全、信息收集等…

ICML2024高分論文!大模型計算效率暴漲至200%,來自中國AI公司

前段時間&#xff0c;KAN突然爆火&#xff0c;成為可以替代MLP的一種全新神經網絡架構&#xff0c;200個參數頂30萬參數&#xff1b;而且&#xff0c;GPT-4o的生成速度也是驚艷了一眾大模型愛好者。 大家開始意識到—— 大模型的計算效率很重要&#xff0c;提升大模型的token…

前端加載excel文件數據 XLSX插件的使用

npm i xlsx import axios from axios; axios //這里用自己封裝的http是不行的&#xff0c;踩過坑.get(url,{ responseType: "arraybuffer" }).then((re) > {console.log(re)let res re.datavar XLSX require("xlsx");let wb XLSX.read(r…

黑龍江大學文學院古代文學教研室安家琪副教授

女&#xff0c;生于1990年。蘭州大學文學學士、碩士&#xff0c;上海交通大學文學博士&#xff0c;曾赴臺灣東華大學交流&#xff0c;研究方向為明清詩文與唐代文學。 在《文藝理論研究》、《蘇州大學學報》、《唐史論叢》、《中國社會科學報》等期刊發表論文20余篇&#xff0…

2024年 電工杯 (A題)大學生數學建模挑戰賽 | 園區微電網風光儲協調優化配置 | 數學建模完整代碼解析

DeepVisionary 每日深度學習前沿科技推送&頂會論文&數學建模與科技信息前沿資訊分享&#xff0c;與你一起了解前沿科技知識&#xff01; 本次DeepVisionary帶來的是電工杯的詳細解讀&#xff1a; 完整內容可以在文章末尾全文免費領取&閱讀&#xff01; 問題重述…

干就對了!

成年人的世界哪有那么容易&#xff0c;不過都在負重前行&#xff0c;誰不是一邊抱怨著&#xff0c;一邊咬牙堅持&#xff0c;一邊崩潰&#xff0c;一邊還要自我安慰。 想改變&#xff0c;想更好&#xff0c;我們都有很多想法。 想再多不如動手做一次。一旦開始做了&#xff0…

前端手寫文件上傳;使用input實現文件拖動上傳

使用input實現文件拖動上傳 vue2代碼&#xff1a; <template><div><div class"drop-area" dragenter"highlight" dragover"highlight" dragleave"unhighlight" drop"handleDrop"click"handleClick&quo…

聽說京東618裁員沒?上午還在趕需求,下午就開會通知被裁了~

文末還有最新面經共享群&#xff0c;沒準能讓你刷到意向公司的面試真題呢。 京東也要向市場輸送人才了? 在群里看到不少群友轉發京東裁員相關的內容&#xff1a; 我特地去網上搜索了相關資料&#xff0c;看看網友的分享&#xff1a; 想不到馬上就618了&#xff0c;東哥竟然搶…

Python 機器學習 基礎 之 模型評估與改進 【模型評估與改進 / 交叉驗證】的簡單說明

Python 機器學習 基礎 之 模型評估與改進 【模型評估與改進 / 交叉驗證】的簡單說明 目錄 Python 機器學習 基礎 之 模型評估與改進 【模型評估與改進 / 交叉驗證】的簡單說明 一、簡單介紹 二、模型評估與改進 三、交叉驗證 1、scikit-learn 中的交叉驗證 2、交叉驗證的…

stm32工程綜合實驗_延時及中斷優先級

待下載綜合實驗 ![在這里插入圖片描述](https://img-blog.csdnimg.cn/161fa4e200bb4022bf384e80a3af8797.jpg 很好的編程思想模式及資料(富萊xx電子)

【repo系列】repo常用命令的使用

前言 repo是一種代碼版本管理工具&#xff0c;它是由一系列的Python腳本組成&#xff0c;封裝了一系列的Git命令&#xff0c;用來統一管理多個Git倉庫。 本文章描述repo常用命令的使用。 常用命令 初始化 repo init 初始化代碼倉 repo init [options]常用options: -u URL…

JDBC——API詳解

一、DriverManager 1、用于注冊驅動程序&#xff1a;registerDriver(Driver driver)。 更常用的是Class.forName("com.mysql.jdbc.Driver")是由于Driver中包含了registerDriver(Driver driver)&#xff0c;值得注意的是&#xff0c;是mysql5之后的版本中&#xff0…

1.每日設計模式-理論

目錄 一、什么是設計模式 二、設計原則 三、設計模式的種類 代碼地址&#xff1a;patterns: 每日設計模式 一、什么是設計模式 軟件設計模式(Design Pattern)是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結&#xff0c;使用設計模式是為了可重用代碼…

AI大模型的口語練習APP

開發一個使用第三方大模型的口語練習APP涉及多個步驟&#xff0c;從需求分析到部署上線。以下是詳細的開發流程和關鍵步驟&#xff0c;通過系統化的流程和合適的技術選型&#xff0c;可以有效地開發出一個功能豐富、用戶體驗良好的口語練習APP。北京木奇移動技術有限公司&#…

網絡初識 二

一、TCP/IP五層協議 -> 應用層 : 傳輸的數據在應用程序中如何使用 -> 傳輸層 : 關注的是通信的起點終點 -> 網絡層 : 關注的是通信中的路線規劃 -> 數據鏈路層 : 關注的是相鄰節點之間的通信細節 -> 物理層 : 網絡通信的基礎設施 說是五層,實際上下面…

Qt案例練習(有源碼)

項目源碼和資源&#xff1a;Qt案例練習: qt各種小案例練習,有完整資源和完整代碼 1.案例1 項目需求&#xff1a;中間為文本框&#xff0c;當點擊上面的復選框和單選按鈕時&#xff0c;文本框內的文本會進行相應的變化。 代碼如下&#xff1a; #include "dialog.h" …

C++的數據結構(十):AVL樹

AVL樹是一種自平衡的二叉搜索樹&#xff0c;得名于其發明者G.M. Adelson-Velsky和E.M. Landis。在AVL樹中&#xff0c;任何節點的兩個子樹的高度最多相差1&#xff0c;這種性質確保了AVL樹的查找、插入和刪除操作的時間復雜度接近O(log n)。 AVL樹是一種二叉搜索樹&#xff0c;…

MongoDB基礎入門到深入(七)建模、調優

文章目錄 系列文章索引十一、MongoDB開發規范十二、MongoDB調優1、三大導致MongoDB性能不佳的原因2、影響MongoDB性能的因素3、MongoDB性能監控工具&#xff08;1&#xff09;mongostat&#xff08;2&#xff09;mongotop&#xff08;3&#xff09;Profiler模塊&#xff08;4&a…