最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt實(shí)現(xiàn)解壓帶有密碼的加密文件

 更新時(shí)間:2022年02月10日 08:34:06   作者:中國(guó)好公民st  
Quazip是Qt平臺(tái)下面的一個(gè)壓縮解壓縮庫(kù)。本文將利用Quazip實(shí)現(xiàn)解壓帶有密碼的加密文件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

上一章節(jié)中介紹了如何使用Qt編譯quazip庫(kù)以及對(duì)文件加解密的簡(jiǎn)單應(yīng)用,那么,今天我們繼續(xù)深挖關(guān)于解密操作的功能吧!

簡(jiǎn)單的解密一個(gè)壓縮包,可以使用#include "JlCompress.h"中的函數(shù)進(jìn)行靜態(tài)操作。如果你只是需要簡(jiǎn)單的應(yīng)用那么,這個(gè)文件中的功能就基本可以滿足了。

在我們開發(fā)過(guò)程中,為了資料的保密性期間,一般情況下都會(huì)對(duì)壓縮包進(jìn)行加密,那么我們還要使用靜態(tài)函數(shù)的方式進(jìn)行解密那就不支持了。那么,我們?cè)撊绾谓饷軒в忻艽a的加密文件呢?

這也是當(dāng)前文章中的重點(diǎn)啦!

根據(jù)官網(wǎng)上給出的結(jié)果,一般我們會(huì)采取QuaZipFile類來(lái)進(jìn)行非靜態(tài)的解密方式,該方式也支持了帶有密碼的壓縮包文件。

接下來(lái)我來(lái)具體講述該如何實(shí)現(xiàn)帶有密碼的壓縮包解密方法吧!

開發(fā)環(huán)境:VS2017 + Qt5.14.2 x64 win10系統(tǒng)

1.指定zip壓縮包狀態(tài)

在我們操作壓縮包的時(shí)候,首先要做的就是指明當(dāng)前是需要壓縮還是解壓縮文件。

當(dāng)前,我們實(shí)現(xiàn)的功能是解壓縮文件,代碼實(shí)現(xiàn)

QuaZip zip(qsZipFiles);
zip.open(QuaZip::mdUnzip); //解壓模式打開

打開Zip文件的方式有以下幾種

枚舉說(shuō)明
QuaZip::mdNotOpenZIP文件沒有打開。這是初始模式
QuaZip::mdUnzipZIP文件打開以讀取里面的文件
QuaZip::mdCreateZIP文件是通過(guò)open()調(diào)用創(chuàng)建的
QuaZip::mdAppend以追加方式打開ZIP文件
QuaZip::mdAddZIP文件被打開,用于在存檔中添加文件

2.創(chuàng)建解壓文件

當(dāng)我們成功打開壓縮文件后的第一步需要?jiǎng)?chuàng)建解壓文件,否則解壓的文件無(wú)法存儲(chǔ)。

QString dstPath = qsUnzipFiles;
if (!dstPath.endsWith("/") && !dstPath.endsWith("\\"))
{
	dstPath += "/";
}

QDir dir(qsUnzipFiles);
if (!dir.exists())
{
	dir.mkpath(qsUnzipFiles);
}

3.獲取實(shí)際的壓縮數(shù)量

int nCount = zip.getEntriesCount(); //壓縮實(shí)體數(shù)量

4.遍歷方式創(chuàng)建解壓縮文件

這也是解壓縮文件的重點(diǎn)了。

QuaZip::goToFirstFile:將當(dāng)前文件設(shè)置為存檔中的第一個(gè)文件

QuaZip::goToNextFile:將當(dāng)前文件設(shè)置為存檔中的下一個(gè)文件

以for循環(huán)遍歷的方式進(jìn)行查詢,在這里與之前的for循環(huán)不同的是以上兩個(gè)函數(shù)的返回值都是bool值,這里我們也需要遍歷bool值

for (bool suc = zip.goToFirstFile(); suc; suc = zip.goToNextFile())
{
    //實(shí)際的文件處理
}

這個(gè)文件查找方式是如何操作的呢?

在實(shí)際運(yùn)行過(guò)程中,goToFirstFile函數(shù)會(huì)從當(dāng)前文件夾中的第一個(gè)文件夾進(jìn)行遍歷,一直遍歷到該文件夾下面沒有子文件為止。然后才會(huì)訪問(wèn)第二個(gè)文件夾。

在for循環(huán)中的實(shí)際處理是如何呢?

4.1設(shè)置解壓文件的參數(shù)

1:設(shè)置壓縮包的名稱

QuaZipFile zipFile;
QString qsTempZipName = zip.getZipName();
zipFile.setZipName(qsTempZipName);

2:設(shè)置當(dāng)前需要解壓的文件

QString filename = zip.getCurrentFileName();
zipFile.setFileName(filename);

代碼解析:獲取當(dāng)前正在訪問(wèn)的文件夾,并設(shè)置需要讀取的文件夾名稱

4.2以讀的方式打開加密文件

bool bOpen = zipFile.open(QIODevice::ReadOnly, chPassword);
if(bOpen == false)
    return false;

代碼解析:只有在返回值bOpen是true的情況下才代表了讀取成功。

如果返回值是false,在路徑?jīng)]有問(wèn)題的情況下,基本上是密碼錯(cuò)誤。

注意?。。?/p>

在這里需要強(qiáng)烈注意的一點(diǎn)是:輸入的密碼一定是const char*類型,否則返回值一直是false。這個(gè)坑真的是讓我特別無(wú)語(yǔ)!

4.3獲取當(dāng)前文件的所有內(nèi)容

QByteArray data = zipFile.readAll();
zipFile.close();

使用readAll的方式讀取文件,這個(gè)方法就不再過(guò)多說(shuō)明了,很簡(jiǎn)單,一定要記得,讀取文件之后一定要關(guān)閉文件!

4.4創(chuàng)建解壓縮后的同名文件

if (filename.endsWith("/"))
{
	dir.mkpath(filename);
}
else
{
	dstFile.setFileName(dstPath + filename);
	if (!dstFile.open(QIODevice::WriteOnly))
	{
		return false;
	}
	dstFile.write(data);
	dstFile.close();

}

5.關(guān)閉zip壓縮包

zip.close();

這個(gè)操作是一定要有的!

到這里,帶有密碼的壓縮包就可以解壓出來(lái)了!

到此這篇關(guān)于Qt實(shí)現(xiàn)解壓帶有密碼的加密文件的文章就介紹到這了,更多相關(guān)Qt解壓加密文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中static和auto用法詳解

    C語(yǔ)言中static和auto用法詳解

    大家好,本篇文章主要講的是C語(yǔ)言中static和auto用法詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • C++中std::optional的使用指南分享

    C++中std::optional的使用指南分享

    C++?17?引入了std::optional,表示一個(gè)可能有值的對(duì)象,這篇文章主要來(lái)和大家聊聊std::optional的使用,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-06-06
  • C/C++的關(guān)鍵字之static你了解嗎

    C/C++的關(guān)鍵字之static你了解嗎

    這篇文章主要為大家詳細(xì)介紹了C/C++的關(guān)鍵字之static,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C++基本用法實(shí)踐之模板詳解

    C++基本用法實(shí)踐之模板詳解

    C++的模板是泛型編程思想的一種實(shí)現(xiàn),模板不光支持函數(shù)模板,還有類模板等,本文主要來(lái)和大家聊聊C++中模板的相關(guān)用法,需要的可以參考一下
    2023-07-07
  • 如何通過(guò)C++在Bing搜索引擎上進(jìn)行命令行搜索

    如何通過(guò)C++在Bing搜索引擎上進(jìn)行命令行搜索

    這篇文章主要介紹了通過(guò)C++在Bing搜索引擎上進(jìn)行命令行搜索,在這篇文章中,我們將介紹一個(gè)簡(jiǎn)單的C++程序,允許用戶通過(guò)命令行輸入搜索詞,在Bing搜索引擎上執(zhí)行搜索,并在默認(rèn)瀏覽器中顯示搜索結(jié)果,需要的朋友可以參考下
    2023-12-12
  • 淺談 C++17 里的 Visitor 模式

    淺談 C++17 里的 Visitor 模式

    Visitor模式經(jīng)常用于將更新的設(shè)計(jì)封裝在一個(gè)類中,并且由待更改的類提供一個(gè)接受接口,其關(guān)鍵技術(shù)在于雙分派技術(shù),本文主要介紹 C++17 里的 Visitor 模式的相關(guān)資料,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • C語(yǔ)言實(shí)現(xiàn)通訊錄的方法(包括靜態(tài)版本和動(dòng)態(tài)版本)

    C語(yǔ)言實(shí)現(xiàn)通訊錄的方法(包括靜態(tài)版本和動(dòng)態(tài)版本)

    本文給大家分享C語(yǔ)言實(shí)現(xiàn)通訊錄的方法(包括靜態(tài)版本和動(dòng)態(tài)版本),針對(duì)每種方法給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-09-09
  • 詳解C語(yǔ)言未初始化的局部變量是多少

    詳解C語(yǔ)言未初始化的局部變量是多少

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言未初始化的局部變量是多少,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C++實(shí)現(xiàn)簡(jiǎn)易五子棋游戲

    C++實(shí)現(xiàn)簡(jiǎn)易五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)簡(jiǎn)易五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • C語(yǔ)言每日練習(xí)之選擇排序

    C語(yǔ)言每日練習(xí)之選擇排序

    本篇文章主要介紹了 C語(yǔ)言的選擇排序,這里提供代碼實(shí)例以便大家理解,通過(guò)本文,更好的理解排序算法
    2021-11-11

最新評(píng)論

普宁市| 碌曲县| 福清市| 仁化县| 济宁市| 建德市| 博兴县| 武定县| 商南县| 德庆县| 五指山市| 友谊县| 黔东| 阿城市| 隆回县| 霍山县| 进贤县| 万山特区| 四川省| 岫岩| 泰来县| 甘肃省| 叶城县| 来凤县| 台前县| 谷城县| 新乡市| 开远市| 威远县| 巩留县| 凤山市| 广丰县| 高雄市| 庆云县| 鲁山县| 保康县| 都兰县| 大竹县| 团风县| 霸州市| 晴隆县|