abcdef

使用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了

posted @ 2013-03-13 17:11  jianc  阅读(16480)  评论(0编辑  收藏  举报