参考

https://blog.csdn.net/auccy/article/details/81194838

https://blog.csdn.net/kkwant/article/details/81809711

使用zlib库解压文件

auccy 2018-07-25 01:01:18  8470  已收藏 9

分类专栏: Windows

版权

下载zlib库源码:http://www.zlib.net/

编译lib库

选择对应的Visual Studio工程目录打开zlibvc.sln文件,工程设置为Release模式,选中zlibstat项,将预处理器中的ASMINF宏删除(重要否则会产生 L_get_length_code_mmx 的崩溃

编译成功后会生成zlibstat.lib库

将 zlibstat.lib,zlib.h,zconf.h 拷贝到工程目录,并通过 属性-连接器-输入-附加依赖项 导入zlibstat.lib;

将unzip.h,unzip.c,ioapi.h,ioapi.c拷贝到工程目录,并添加到工程

这几个文件在源码中的位置如图

测试工程的设置:

核心代码:

 

#include <iostream>
#include <string>
#include "unzip.h"
#include <direct.h>bool unzipCurrentFile(unzFile uf, const char *destFolder)
{char szFilePath[512];unz_file_info64 FileInfo;if (unzGetCurrentFileInfo64(uf, &FileInfo, szFilePath, sizeof(szFilePath), NULL, 0, NULL, 0) != UNZ_OK)return false;size_t len = strlen(szFilePath);if (len <= 0){return false;}std::string fullFileName = destFolder;fullFileName = fullFileName + "\\" + szFilePath;if (szFilePath[len - 1] == '\\' || szFilePath[len - 1] == '/'){_mkdir(fullFileName.c_str());return true;}auto file = fopen(fullFileName.c_str(), "wb");if (file == nullptr){return false;}const int BUFFER_SIZE = 4096;unsigned char byBuffer[BUFFER_SIZE];if (unzOpenCurrentFile(uf) != UNZ_OK){fclose(file);return false;}while (true){int nSize = unzReadCurrentFile(uf, byBuffer, BUFFER_SIZE);if (nSize < 0){unzCloseCurrentFile(uf);fclose(file);return false;}else if (nSize == 0){break;}else{size_t wSize = fwrite(byBuffer, 1, nSize, file);if (wSize != nSize){unzCloseCurrentFile(uf);fclose(file);return false;}}}unzCloseCurrentFile(uf);fclose(file);return true;
}bool unzipFile(std::string zipFileName, std::string goalPath)
{unzFile uf = unzOpen64(zipFileName.c_str());if (uf == NULL)return false;unz_global_info64 gi;if (unzGetGlobalInfo64(uf, &gi) != UNZ_OK){unzClose(uf);return false;}std::string path=zipFileName;auto pos = path.find_last_of("/\\");if (pos != std::string::npos)path.erase(path.begin() + pos, path.end());for (int i = 0; i < gi.number_entry; ++i){if (!unzipCurrentFile(uf, goalPath.c_str())){unzClose(uf);return false;}if (i < gi.number_entry - 1){if (unzGoToNextFile(uf) != UNZ_OK){unzClose(uf);return false;}}}unzClose(uf);return true;
}int main()
{unzipFile("test.zip", "C:\\Users\\Administrator\\Desktop\\cc");getchar();return 0;
}

博友反馈解压的目标目录需要存在

即 C:\\Users\\Administrator\\Desktop\\cc文件夹需要提前创建

压缩解压缩文件zlib相关推荐

  1. linux如何查看归档文件,linux基本命令:文本搜索,拷贝文件,移动文件,归档管理,压缩解压缩文件,查看命令位置...

    1.文本搜索:grep grep查找的是文件内容中的文本,字符需要用引号括起来,单引双引都可以 格式:grep [-选项] '内容' 文件名 例如: -v显示不包含匹配文本的所有行(相当于求反) -n ...

  2. java使用tar算法压缩解压缩文件、数据流、byte[]字节数组

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用tar算法压缩解压缩文件.数据流.byte[]字节数组 需要添加org.apache.commons.compress包,下载 测试代 ...

  3. java使用BZip算法压缩解压缩文件、数据流、byte[]字节数组

    全栈工程师开发手册 (作者:栾鹏) java教程全解 java使用BZip算法压缩解压缩文件.数据流.byte[]字节数组 需要添加org.apache.commons.compress包,下载 测试 ...

  4. 在Linux中压缩/解压缩文件

    关于后缀名为tar的(压缩和解压) # 打包文件 tar -cvf 打包文件.tar 被打包文件/路径... (-c打包,-v显示过程,-f指定打包后的文件名) # 解包文件 tar -xvf 打包文 ...

  5. Linux的压缩/解压缩文件命令 zip 和 tar

    Linux的压缩/解压缩命令详解及实例 压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服 ...

  6. Java中压缩/解压缩文件有什么好的解决方案呢?

    转入: Java中压缩/解压缩文件有什么好的解决方案呢? 下文笔者将讲述java中压缩/解压缩文件的处理方法分享,如下所示: 我们都知道,在java中JDK的Apache默认带有Zip库 但是它太大, ...

  7. c# 利用 GZipStream 压缩解压缩文件(所有类型的文档)

    c# 利用 GZipStream 压缩解压缩文件(所有类型的文档) using System; using System.Collections.Generic; using System.IO; u ...

  8. c语言程序压缩解压缩文件夹,【转】使用VC++压缩解压缩文件夹

    前言 项目中要用到一个压缩解压缩的模块, 看了很多文章和源代码, 都不是很称心, 现在把我自己实现的代码和大家分享. 要求: 1.使用Unicode(支持中文). 2.使用源代码.(不使用静态或者动态 ...

  9. 使用系统(win7/win10/windows)压缩/解压缩文件,基于vbs脚本,执行bat批处理

    功能说明 window操作系统 未安装压缩的软件 有需要压缩.解压缩文件 支持单文件压缩 支持目录及子目录压缩 目录结构 压缩脚本(zip.vbs) Set objArgs = WScript.Arg ...

  10. zlib压缩解压缩文件

    1. 如何获得zlib zlib的主页是:http://www.zlib.net/ 偶是从www.xunlei.com搜到的. 2. 用VC++6.0打开 把 下载的源代码解压打开,VC6.0的工程已 ...

最新文章

  1. Asp.net的Session和Cookie传值方式
  2. ubuntu 安装VmTool
  3. SoftReference的用法
  4. c语言pause()函数(让进程暂停直到信号出现)
  5. php 框架 路由解析,来!狂撸一款PHP现代化框架 (路由的设计)
  6. html5 渐变色矩形,使用HTML5画布元素的矩形渐变
  7. AJAX如何做出输入框提示!
  8. [动态规划] leetcode 10 正则表达式匹配
  9. Berkeley DB Java Edition
  10. 如何写代码,才能越写越轻松?
  11. Windows核心编程_Edit操作
  12. VC6.0无法进入调试
  13. WEB漏洞挖掘——思路指南
  14. IIS发布可下载文件的站点
  15. Arcgis重采样或者裁剪的问题
  16. 无线扩音器FCC认证CE认证需要满足那些要求
  17. 计算机九九乘法口诀表,九九乘法口诀表
  18. App - 电影天堂第三方客户端
  19. 高校社团管理系统java_高校社团管理系统设计及实现.doc
  20. 学PS基础:Photoshop 技能167个

热门文章

  1. CAD二次开发(C#)之添加文字样式
  2. NAT64 Technology: Connecting IPv6 and IPv4 Networks
  3. 文本匹配、文本相似度模型之DSSM
  4. vnc远程控制软件,五款良心推荐的vnc远程控制软件
  5. 量化交易----常见股票特征和编程实现
  6. Linux学习第一周作业。
  7. 计算机语言output,output是什么意思
  8. mac分区后数据丢失怎么恢复?
  9. 隐马尔科夫模型(二)
  10. 机械视觉外观检测系统软件ALFA