欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

在我們開發(fā)過程中,為了資料的保密性期間,一般情況下都會對壓縮包進行加密,那么我們還要使用靜態(tài)函數(shù)的方式進行解密那就不支持了。那么,我們該如何解密帶有密碼的加密文件呢?

這也是當前文章中的重點啦!

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

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

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

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

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

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

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

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

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

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

當我們成功打開壓縮文件后的第一步需要創(chuàng)建解壓文件,否則解壓的文件無法存儲。

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

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

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

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

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

這也是解壓縮文件的重點了。

QuaZip::goToFirstFile:將當前文件設置為存檔中的第一個文件

QuaZip::goToNextFile:將當前文件設置為存檔中的下一個文件

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

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

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

在實際運行過程中,goToFirstFile函數(shù)會從當前文件夾中的第一個文件夾進行遍歷,一直遍歷到該文件夾下面沒有子文件為止。然后才會訪問第二個文件夾。

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

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

1:設置壓縮包的名稱

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

2:設置當前需要解壓的文件

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

代碼解析:獲取當前正在訪問的文件夾,并設置需要讀取的文件夾名稱

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

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

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

如果返回值是false,在路徑沒有問題的情況下,基本上是密碼錯誤。

注意?。?!

在這里需要強烈注意的一點是:輸入的密碼一定是const char*類型,否則返回值一直是false。這個坑真的是讓我特別無語!

4.3獲取當前文件的所有內容

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

使用readAll的方式讀取文件,這個方法就不再過多說明了,很簡單,一定要記得,讀取文件之后一定要關閉文件!

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.關閉zip壓縮包

zip.close();

這個操作是一定要有的!

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

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

相關文章

最新評論