ToB企服应用市场:ToB评测及商务社交产业平台

标题: 轻量级力量:深入MiniZip库,实现C++中ZIP文件的简便压缩与解压 [打印本页]

作者: 灌篮少年    时间: 2024-3-10 15:46
标题: 轻量级力量:深入MiniZip库,实现C++中ZIP文件的简便压缩与解压
 
MiniZip是一个轻量级的压缩库,它是zlib库的一部分,用于在C++中进行ZIP文件的压缩和解压缩操作。以下是MiniZip的一些功能和优点:
功能:
优点:
下面是一个简单的示例代码,演示如何使用MiniZip在C++中进行目录压缩和解压。在这个例子中,我将使用zlib的minizip和unzip API。
  1. #include <stdio.h>
  2. #include "zip.h"
  3. #include "unzip.h"
  4. void ZipDirectory(const char *inputDir, const char *zipFile) {
  5.     zipFile zf = zipOpen(zipFile, 0);
  6.     if (zf == NULL) {
  7.         printf("Error: Unable to open zip file %s\n", zipFile);
  8.         return;
  9.     }
  10.     zipAddGlob(zf, "*.*", ZIP_FL_RECURSE, NULL);
  11.     zipClose(zf, NULL);
  12. }
  13. void UnzipFile(const char *zipFile, const char *outputDir) {
  14.     unzFile uf = unzOpen(zipFile);
  15.     if (uf == NULL) {
  16.         printf("Error: Unable to open zip file %s\n", zipFile);
  17.         return;
  18.     }
  19.     unz_global_info globalInfo;
  20.     if (unzGetGlobalInfo(uf, &globalInfo) != UNZ_OK) {
  21.         printf("Error: Unable to get global info for %s\n", zipFile);
  22.         unzClose(uf);
  23.         return;
  24.     }
  25.     if (unzGoToFirstFile(uf) != UNZ_OK) {
  26.         printf("Error: Unable to go to first file in %s\n", zipFile);
  27.         unzClose(uf);
  28.         return;
  29.     }
  30.     do {
  31.         char filename[256];
  32.         unz_file_info fileInfo;
  33.         if (unzGetCurrentFileInfo(uf, &fileInfo, filename, sizeof(filename), NULL, 0, NULL, 0) != UNZ_OK) {
  34.             printf("Error: Unable to get current file info in %s\n", zipFile);
  35.             break;
  36.         }
  37.         char filePath[512];
  38.         snprintf(filePath, sizeof(filePath), "%s/%s", outputDir, filename);
  39.         if (unzOpenCurrentFile(uf) != UNZ_OK) {
  40.             printf("Error: Unable to open current file in %s\n", zipFile);
  41.             break;
  42.         }
  43.         FILE *outputFile = fopen(filePath, "wb");
  44.         if (outputFile == NULL) {
  45.             printf("Error: Unable to open output file %s\n", filePath);
  46.             unzCloseCurrentFile(uf);
  47.             break;
  48.         }
  49.         char buffer[4096];
  50.         int bytesRead;
  51.         do {
  52.             bytesRead = unzReadCurrentFile(uf, buffer, sizeof(buffer));
  53.             if (bytesRead > 0) {
  54.                 fwrite(buffer, 1, bytesRead, outputFile);
  55.             }
  56.         } while (bytesRead > 0);
  57.         fclose(outputFile);
  58.         unzCloseCurrentFile(uf);
  59.     } while (unzGoToNextFile(uf) == UNZ_OK);
  60.     unzClose(uf);
  61. }
  62. int main() {
  63.     const char *inputDirectory = "path/to/your/directory";
  64.     const char *zipFileName = "output.zip";
  65.     const char *outputDirectory = "path/to/extract/files";
  66.     // 压缩目录
  67.     ZipDirectory(inputDirectory, zipFileName);
  68.     // 解压缩文件
  69.     UnzipFile(zipFileName, outputDirectory);
  70.     return 0;
  71. }
复制代码
请注意,这只是一个简单的示例,实际应用可能需要更多的错误处理和边界情况处理。确保在实际项目中进行充分的测试和适当的错误处理。
 



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4