使用zlib压缩多个文件

1、下载:官网zlib Home Site下载:

 2、windows下vs2017编译:

我这边用vs2017打开后直接就编译了6个文件成功了

3、qt5.9.6加载该库:

 

 头文件用下面这几个

4、qt下源码: 

void DialogTest::on_pushButton_clicked()
{
    QString pathname = "F:/资源/test.zip";
    zipFile zf = zipOpen64(pathname.toLocal8Bit().data(), APPEND_STATUS_CREATE);
    if(zf == nullptr)
    {
        return ;
    }
 
    int ir = 0;
    QStringList slFileList;
    slFileList.append("F:/资源/ColorTest2.0_V2.5.14.221116.exe");
    slFileList.append("F:/资源/cs1.png");
    slFileList.append("D:/公司相关/C  代码规范学习资料.rar");
    slFileList.append("D:/公司相关/加特林新员工入职指南V2.0-230322修改1.docx");
    for(int i = 0;i < slFileList.count();i++)
    {
        QFileInfo fi(slFileList[i]);
        if(fi.isFile() == false)
        {
            continue;
        }
 
        QString filename = fi.fileName();
        QDateTime dt = fi.created();
        zip_fileinfo zfi;
        zfi.tmz_date.tm_year = dt.date().year();
        zfi.tmz_date.tm_mon = dt.date().month();
        zfi.tmz_date.tm_mday = dt.date().day();
        zfi.tmz_date.tm_hour = dt.time().hour();
        zfi.tmz_date.tm_min = dt.time().minute();
        zfi.tmz_date.tm_sec = dt.time().second();
        zfi.dosDate = 0;
        zfi.external_fa = zfi.internal_fa = 0;
        ir = zipOpenNewFileInZip3_64(zf, filename.toLocal8Bit().data(), &zfi, nullptr, 0, nullptr, 0, nullptr, Z_DEFLATED, Z_DEFAULT_COMPRESSION, 0, -MAX_WBITS, DEF_MEM_LEVEL,
                                     Z_DEFAULT_STRATEGY, nullptr, 0, 0);
        if(ir != ZIP_OK)
        {
            break;
        }
 
        FILE *fr = fopen(fi.filePath().toLocal8Bit().data(), "rb");
        if(fr == nullptr)
        {
            zipCloseFileInZip(zf);
            break;
        }
 
        char cBuf[1024] = { 0 };
        while (true)
        {
            memset(cBuf, 0, sizeof(cBuf));
            size_t stfr = fread(cBuf, 1, sizeof(cBuf), fr);
            if (stfr > 0)
            {
                ir = zipWriteInFileInZip(zf, cBuf, (unsigned int)stfr);
                if(ir != ZIP_OK)
                {
                    break;
                }
            }
            if (feof(fr) != 0)
            {
                break;
            }
 
            if (stfr != sizeof(cBuf))
            {
                break;
            }
        }
 
        zipCloseFileInZip(zf);
    }
 
    zipClose(zf, nullptr);
}

记得包含头文件:

5、vs2017加载该库:

 

 

 

6、vs源码:

 

#include "zip.h"
#include <objbase.h>
#include <string>
#include <vector>

#pragma warning(disable:4996)

int main(int argc, char *argv[])
{
    std::string pathname = "F:/资源/test.zip";
    zipFile zf = zipOpen64(pathname.c_str(), APPEND_STATUS_CREATE);
    if (zf == nullptr)
    {
        return -1;
    }

    int ir = 0;
    std::vector<std::string> svssFilePathList;
    svssFilePathList.push_back("F:/资源/ColorTest2.0_V2.5.14.221116.exe");
    svssFilePathList.push_back("F:/资源/cs1.png");
    svssFilePathList.push_back("D:/公司相关/C  代码规范学习资料.rar");
    svssFilePathList.push_back("D:/公司相关/加特林新员工入职指南V2.0-230322修改1.docx");
    std::vector<std::string> svssFileName;
    svssFileName.push_back("ColorTest2.0_V2.5.14.221116.exe");
    svssFileName.push_back("cs1.png");
    svssFileName.push_back("C  代码规范学习资料.rar");
    svssFileName.push_back("加特林新员工入职指南V2.0-230322修改1.docx");
    for (size_t i = 0; i < svssFilePathList.size(); i++)
    {
        zip_fileinfo zfi = { 0 };
        ir = zipOpenNewFileInZip3_64(zf, svssFileName.at(i).c_str(), &zfi, nullptr, 0, nullptr, 0, nullptr, Z_DEFLATED, Z_BEST_SPEED, 0, -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, nullptr, 0, 0);
        if (ir != ZIP_OK)
        {
            break;
        }

        FILE *fr = fopen(svssFilePathList.at(i).c_str(), "rb");
        if (fr == nullptr)
        {
            zipCloseFileInZip(zf);
            break;
        }

        char cBuf[1024] = { 0 };
        while (true)
        {
            memset(cBuf, 0, sizeof(cBuf));
            size_t stfr = fread(cBuf, 1, sizeof(cBuf), fr);
            if (stfr > 0)
            {
                ir = zipWriteInFileInZip(zf, cBuf, (unsigned int)stfr);
                if (ir != ZIP_OK)
                {
                    break;
                }
            }
            if (feof(fr) != 0)
            {
                break;
            }

            if (stfr != sizeof(cBuf))
            {
                break;
            }
        }

        zipCloseFileInZip(zf);
    }

    zipClose(zf, nullptr);

    return 0;
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值