zoukankan      html  css  js  c++  java
  • 使用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了

  • 相关阅读:
    java常见异常总结
    敏捷开发的七种主流方法
    转:一位10年Java工作经验的架构师聊Java和工作经验
    Map遍历
    Mybatis中的模糊查询
    Mybatis中动态SQL多条件查询
    J2EE,LAMP和ASP.NET三者比较
    关于加密
    Md5Hash的测试
    CentOS7 修改默认时区为 北京时间
  • 原文地址:https://www.cnblogs.com/jianc/p/2957974.html
Copyright © 2011-2022 走看看