前言

最近做项目需要用到网络下载压缩文件并解压至指定文件夹,本意是使用zlib库,但是花费许久时间仍没有编译通过官网的文件,于是放弃,转而寻求其他方法,在之前的博客中有说道用system调用shell命令的方式使用winrar解压,但是这种方法有一个弊端就是要求客户端必须安装winrar,虽然winrar是每个电脑都必备的一款软件但是不排除有客户端没有安装的情况,因此本人花费半天时间找到了替代方法:使用专门的zip接口,即ziputils下载链接,测试可用

附官网链接ziputils官网

正文

首先我的下载链接中有两个文件夹,分别为解压文件跟压缩文件,本人已调通解压文件功能

将解压文件夹下的

添加至项目,我的环境是VS2005

下面上代码

//将路径转为TCHAR类型int iUnicode = MultiByteToWideChar(CP_ACP, 0, ZIPFileName_1.c_str(), ZIPFileName_1.length(), NULL, 0);WCHAR* pwUnicode = new WCHAR[iUnicode + 2];if (pwUnicode){ZeroMemory(pwUnicode, iUnicode + 2);}MultiByteToWideChar(CP_ACP, 0, ZIPFileName_1.c_str(), ZIPFileName_1.length(), pwUnicode, iUnicode);pwUnicode[iUnicode] = '\0';pwUnicode[iUnicode+1] = '\0';//解压文件SetCurrentDirectoryA(strdec.c_str());//将进程的工作目录移动到该参数所指的目录下,该目录为winrar.exe的默认文件路径//解压文件会直接在项目的.vcproj目录下进行HZIP hz = OpenZip(pwUnicode,NULL);ZIPENTRY ze; GetZipItem(hz,-1,&ze); int numitems = ze.index;for (int zi = 0; zi < numitems; zi++){ZIPENTRY ze; GetZipItem(hz, zi, &ze);UnzipItem(hz, zi,ze.name);         }CloseZip(hz);

经本人半天调试并阅读官网说明,ziputils接口全部使用TCHAR类型参数,所以要将你的解压路径转换成TCHAR类型

SetCurrentDirectoryA(strdec.c_str());这句是将解压的工作目录切换至你想要的地方,可以删去,不影响功能

下面附带官网示例:

①从现有文件创建zip

// We place the file "simple.bmp" inside, but inside
// the zipfile it will actually be called "znsimple.bmp".
// Similarly the textfile.HZIP hz = CreateZip("simple1.zip",0);
ZipAdd(hz,"znsimple.bmp",  "simple.bmp");
ZipAdd(hz,"znsimple.txt",  "simple.txt");
CloseZip(hz);

②解压压缩文件

HZIP hz = OpenZip("\\simple1.zip",0);
ZIPENTRY ze;
GetZipItem(hz,-1,&ze);
int numitems=ze.index;
// -1 gives overall information about the zipfile
for (int zi=0; zi<numitems; zi++)
{ ZIPENTRY ze; GetZipItem(hz,zi,&ze); // fetch individual detailsUnzipItem(hz, zi, ze.name);         // e.g. the item's name.
}
CloseZip(hz);

③从资源压缩到内存

HRSRC hrsrc = FindResource(hInstance,MAKEINTRESOURCE(1),RT_RCDATA);
HANDLE hglob = LoadResource(hInstance,hrsrc);
void *zipbuf = LockResource(hglob);
unsigned int ziplen = SizeofResource(hInstance,hrsrc);
hz = OpenZip(zipbuf, ziplen, 0);
ZIPENTRY ze; int i; FindZipItem(hz,"sample.jpg",true,&i,&ze);
// that lets us search for an item by filename.
// Now we unzip it to a membuffer.
char *ibuf = new char[ze.unc_size];
UnzipItem(hz,i, ibuf, ze.unc_size);
...
delete[] ibuf;
CloseZip(hz);
// note: no need to free resources obtained through Find/Load/LockResource

④按块拆分到元容器

char buf[1024]; ZRESULT zr=ZR_MORE; unsigned long totsize=0;
while (zr==ZR_MORE)
{ zr = UnzipItem(hz,i, buf,1024);unsigned long bufsize=1024; if (zr==ZR_OK) bufsize=ze.unc_size-totsize;... maybe write the buffer to a disk file heretotsize+=bufsize;
}

由于本次项目没有全部写完,暂时不上传项目

C++解压zip压缩文件相关推荐

  1. java util zip.zipexc,JAVA解压zip压缩文件的实例

    今天在弄一个东西,需要在PL/SQL中解压zip的压缩包,刚开始的时候是想着直接在PLSQL中调用java,在java里面调用unzip的shell命令来解析压缩文件,但是比较悲剧,一直老是失败,在尝 ...

  2. Android 解压 Zip 压缩文件

    一.AndroidManifest.xml 添加 sd 卡读写权限 <uses-permission android:name="android.permission.WRITE_EX ...

  3. Android 解压 Zip 压缩文件

    文章目录 1.简介 2.代码结构 3.AndroidManifest.xml 添加 sd 卡读写权限 4.MainActivity 文件 5.效果查看 1.简介 Android 解压 SD卡 里的 z ...

  4. Linux unzip的使用方法 怎么使用unzip解压zip压缩文件

    执行unzip --h可以查看全部unzip的用法 UnZip 6.00 of 20 April 2009, by Info-ZIP. Maintained by C. Spieler. Send b ...

  5. python h5s文件 压缩_如何用python解压zip压缩文件

    前言:python在办公上非常有用,它可以解压文件,可以处理表格,还可以操作浏览器,只要你能想到的功能,它都能做到,今天笔者就为大家介绍一下如何用处理压缩文件. 打开cmd,输入python3,今天的 ...

  6. python 图像压缩后前端解压_Python在后台自动解压各种压缩文件的实现方法

    1.需求描述 编写一个 Python 程序,每次下载压缩包形式的文件后,自动将内部文件解压到当前文件夹后将压缩包删除,通过本案例可以学到的知识点: os 模块综合应用 glob 模块综合应用 利用 g ...

  7. fatjar打包mysql_一个简单的解压ZIP Excl文件---gt;按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中。 - 明月 - ITeye博客...

    写道 一个简单的解压ZIP Excl文件--->按时间读取Excle文件,通过Fat jar打成jar相对应的添加到mysql数据库中. package common.gaoyang; impo ...

  8. linux常用解压和压缩文件的命令

    linux常用解压和压缩文件的命令 .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) ---- ...

  9. Linux 解压,压缩文件--tar 命令

    其实在Linux中,有许多种解压,压缩文件的命令,本博客介绍 tar 命令 如果Linux 系统不能运行tar 命令的朋友,先安装一下: 1)安装 1.apt-get 方式安装: sudo apt-g ...

  10. 递归遍历文件夹,递归解压,压缩文件,写解压和压缩过程的日志,

    前言:好久好久没另写一篇博客了,都是在更新QT常用函数里面内容,这瘟疫影响了我躁动奋进的心,又是大半年没努力了,气人! 这次做的是个多个压缩包 将压缩包里面的内容合并起来 打包成对应的压缩包的工具. ...

最新文章

  1. Android 获取apk签名的fingerprint
  2. ueditor与七牛云存储结合
  3. 【数据挖掘】决策树 分类 ( 抽取分类规则 | 过拟合 | 剪枝 | 先剪 | 后剪 | 连续数值离散化 | 最优化分点 | 增益率选择划分属性 )
  4. VB.NET开发人员必备参考10本书目
  5. UILabel简单高效实现圆角的方式
  6. java cassandra连接池_java操作cassandra(连接池)
  7. ubuntu-18.04 设置开机启动脚本-亲测有效
  8. 《剑指offer》面试题4——替换空格 C++编程
  9. 用户故事与敏捷方法—迭代计划
  10. 烽火吉比特HG261GU获取超级密码教程
  11. sql:mysql:分析为什么like模糊查询效率低
  12. 计算机xp系统ie8,WinXP系统IE8安装失败的解决方法
  13. 笔记本的网络出现红叉,网络连接不上,网络不可用
  14. js文字转图片,使用画布绘制
  15. 计算机视觉-棋盘格标定
  16. JAVA调用TSC打印机打印标签(二维码,数据等)超详细!!
  17. 安装配置CentOS
  18. 【接口篇 / Wan】(7.0) ❀ 05. 将 4G 作为备用宽带使用 ❀ FortiGate 防火墙
  19. 【问题篇】免费下载使用RDM
  20. CCF计算机软件能力认证 C++ JSON查询

热门文章

  1. 64位系统和32位系统区别
  2. python中title函数有什么用_Python 基础知识全篇-函数(Functions)
  3. 洪恩软件进军网游产业 池宇峰揭密完美世界
  4. linux驱动篇-touchscreen-精简版
  5. cookie安全性问题
  6. 禅与 JavaScript 编程艺术, Zen and The Art of JavaScript Programming
  7. 带宽叠加是什么意思?
  8. Python3读写dbf文本
  9. Day05_Manuals for Python@lisongye-元组/字典
  10. background简写