找回密码
 立即注册
首页 资源区 代码 使用libzip压缩文件和文件夹

使用libzip压缩文件和文件夹

泡市 2025-6-4 16:46:36
简单说说自己遇到的坑:

  • 分清楚三个组件:zlib、minizip和libzip。zlib是底层和最基础的C库,用于使用Deflate算法压缩和解压缩文件流或者单个文件,但是如果要压缩文件夹就很麻烦,主要是不知道如何归档,在zip内部形成对应的目录。这时就需要用更高级别的库,也就是minizip或libzip。
  • minizip、libzip随着版本迭代接口一直变化,我连续使用了通义千问、文心一言、gemini三个AI,基本上没给出能使用的代码,主要是函数接口总是不对,或者参数多了或者少了。像这种情况就不要再参考AI给出的答案了,赶紧翻官方文档才是正经。
  • minizip和libzip都是基于zlib实现的,都尝试使用过,感觉还是libzip的接口设计更清晰一点,官方文档说明也还不错。
  • 压缩文件夹的功能需要借助于操作文件系统的库来组织zip内部的归档目录,我这里使用的是C++17的std::filesystem。
具体代码实现如下:
[code]#include #include #include #include using namespace std;void CompressFile2Zip(std::filesystem::path unZipFilePath,                      const char* relativeName, zip_t* zipArchive) {  std::ifstream file(unZipFilePath, std::ios::binary);  file.seekg(0, std::ios::end);  size_t bufferSize = file.tellg();  char* bufferData = (char*)malloc(bufferSize);  file.seekg(0, std::ios::beg);  file.read(bufferData, bufferSize);  //第四个参数如果非0,会自动托管申请的资源,直到zip_close之前自动销毁。  zip_source_t* source =      zip_source_buffer(zipArchive, bufferData, bufferSize, 1);  if (source) {    if (zip_file_add(zipArchive, relativeName, source, ZIP_FL_OVERWRITE) < 0) {      std::cerr
您需要登录后才可以回帖 登录 | 立即注册