使用zlib庫解壓zip檔案

昌維發表於2019-05-13

1.首先到zlib官網上去下載zlib庫

http://www.zlib.net/

當前最新版是1.2.7

要下編譯好的: zlib127-dll.zip

再下原始碼包:zlib127.zip //主要是摳出裡面zip檔案操作的例子2.隨便寫個測試程式, 使用Qt搭建一個工程

3.Qt中引用zlib庫的dll檔案目錄

include “./Zlib/include/zip.h”

include “./Zlib/include/unzip.h”

pragma comment(lib, “./Zlib/lib/zdll.lib”)

4.把zlib127.zip裡面contribminizip目錄下的.c和.h原始檔(除了minzip.c和minunz.c兩個檔案外)拷貝出來放到Qt工程目錄下, Qt工程目錄新增這些.c檔案進來

5.解壓zip檔案程式:

複製程式碼
unz_file_info64 FileInfo;
unzFile zFile = unzOpen64(“d:/biji.zip”);
if(NULL == zFile)

qDebug() << "zero!";

else

qDebug() << "haha";

unz_global_info64 gi;

if (unzGetGlobalInfo64(zFile, &gi) != UNZ_OK)
{

qDebug() << "ho no";

}

int result;
for (int i = 0; i < gi.number_entry; ++i)
{

char file[256] = {0};
char ext[256] = {0};

char com[1024] = {0};
if (unzGetCurrentFileInfo64(zFile, &FileInfo,file,sizeof(file),ext,256,com,1024)!= UNZ_OK)
    qDebug() << "error";
qDebug() << file << ":" << ext << ":" << com;
if(!(FileInfo.external_fa & FILE_ATTRIBUTE_DIRECTORY)) //檔案,否則為目錄

//開啟檔案
 result=unzOpenCurrentFile(zFile);/* 無密碼 */
result=unzOpenCurrentFilePassword(zFile,"szPassword"); /* 有密碼 */

char data[1024] = {0};
int size;
//讀取內容

QString path = QString("d:/zip/") + file;
QFile f(path);
f.open(QFile::WriteOnly);
while(true) {
    size= unzReadCurrentFile(zFile,data,sizeof(data));
    if(size <= 0)
        break;

// QString str;
// str = QString::fromLocal8Bit(data, size);

    f.write(data, size);
}
f.close();

//關閉當前檔案
unzCloseCurrentFile(zFile);

//出錯
if(i < gi.number_entry - 1 && unzGoToNextFile(zFile) != UNZ_OK)
    qDebug() << "error2";

}
unzClose(zFile);
複製程式碼

ok了

相關文章