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;
}