使用zlib庫解壓zip文件


2013-3-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里面contrib\minizip目錄下的.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了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM