随笔-89  评论-944  文章-0  trackbacks-0

实际应用中有时候会遇到需要处理 ZIP 压缩解压的情况,这时候我们有大概三种选择:

  1. 调用 rar.exe, unzip.exe 等
  2. 使用某现成库
  3. 完全手写

第一种虽然能完成任务,但是没法知晓结果。曾经有人对说,可以抓命令行输出结果来判断……这种依靠界面文字来进行精确判断的行为个人认为相当不靠谱。第三种,既然我是个“造轮主义”者,当然说好,但是现在我不了解 ZIP 格式,也不了解 ZIP 算法,所以这个日后再说。今天我们就来切切实实地用一次轮子。

ZIP 相关的库中比较有名的可能就是 ZLib 和 InfoZip(unzip60)了。InfoZip 我了解的不多,其外层接口似乎也不大好,一堆回调——回调是个很烦人的东西,专门用来打乱代码结构。另外,这个库也已经有好多年没更新了吧,太久的东西给人的感觉总是不太舒服。ZLib 最新版本是 1.2.5,今年 4 月 19 日出的。确切的说,ZLib 可能并不是一个针对 ZIP 文件的库,它只是一个针对 gzip 以及 deflate 算法的库。它提供了一个叫做 minizip (contrib\minizip) 例子来给出操作 ZIP 文件的方法。下文将从 ZLib 出发,归结出两个傻瓜接口:

BOOL ZipCompress(LPCTSTR lpszSourceFiles, LPCTSTR lpszDestFile);
BOOL ZipExtract(LPCTSTR lpszSourceFile, LPCTSTR lpszDestFolder);

要引入的源文件

  1. ZLib 主目录下的代码,除 minigzip.c、example.c 外;
  2. contrib\minizip 下的代码,除 minizip.c、miniunz.c 外。

相关 API

虽然 minizip 更像是个例子,但是除去其主程序 minizip.c 和 miniunz.c 后,剩下的部分我们可以看作是 ZLib 的一个上层库,它封装了与 ZIP 文件格式相关的操作。而 minizip.c 和 miniunz.c 就是我们要改写的——把它从命令行程序改为上述傻瓜接口。minizip.c 和 miniunz.c 中用到的 API 主要有:

压缩相关:

  1. zipOpen64
  2. zipClose
  3. zipOpenNewFileInZip
  4. zipCloseFileInZip
  5. zipWriteInFileInZip

解压相关:

  1. unzOpen64
  2. unzClose
  3. unzGetGlobalInfo64
  4. unzGoToNextFile
  5. unzGetCurrentFileInfo64
  6. unzOpenCurrentFile
  7. unzCloseCurrentFile
  8. unzReadCurrentFile

想必看到这些名字都能猜到怎么用了吧。好的接口果然能带给人愉悦的。minizip 中的这些函数有的是带“64”的有的是不带的,有的还有“2”、“3”、“4”版本。这里一律用带 64 的,不带“2”、“3”、“4”的。

具体操作

下文涉及的所有操作,其相关代码都可以在 http://zlibwrap.codeplex.com/ 上找到(Change Set 2450)。这里就不贴长篇代码了。另外有个 DLL版本Lib版本,供拿来主义者用。

首先是压缩操作。使用 zipOpen64 来打开/创建一个 ZIP 文件,然后开始遍历要被放到压缩包中去的文件。针对每个文件,先调用一次 zipOpenNewFileInZip,然后开始读原始文件数据,使用 zipWriteInFileInZip 来写入到 ZIP 文件中去。zipOpenNewFileInZip 的第三个参数是一个 zip_fileinfo 结构,该结构数据可全部置零,其中 dosDate 可用于填入一个时间(LastModificationTime)。它的第二个参数是 ZIP 中的文件名,若要保持目录结构,该参数中可以保留路径,如 foo/bar.txt。

解压操作稍微复杂一点点。打开一个 ZIP 文件后,需要先使用 unzGetGlobalInfo64 来取得该文件的一些信息,来了解这个压缩包里一共包含了多少个文件,等等。目前我们用得着的就是这个文件数目。然后开始遍历 ZIP 中的文件,初始时自动会定位在第一个文件,以后处理完一个后用 unzGoToNextFile 来跳到下一个文件。对于每个内部文件,可用 unzGetCurrentFileInfo64 来查内部文件名。这个文件名和刚才 zipOpenNewFileInZip 的第二个参数是一样的形式,所以有可能包含路径。也有可能会以路径分隔符(/)结尾,表明这是个目录项(其实压缩操作的时候也可以针对目录写入这样的内部文件,上面没有做)。所以接下来要根据情况创建(多级)目录。unzGetCurrentFileInfo64 的第三个参数是 unz_file_info64 结构,其中也有一项包含了 dosDate 信息,可以还原文件时间。对于非目录的内部文件,用 unzOpenCurrentFile,打开,然后 unzReadCurrentFile 读取文件内容,写入到真实文件中。unzReadCurrentFile 返回 0 表示文件读取结束。

局限性

  1. 只能压缩、解压采用 deflate 算法的 ZIP 文件。(不过此类 ZIP 应该占了绝大多数)
  2. 由于 minizip 中相关 API 的限制,以及 ZIP 文件格式的限制,被压缩/解压的相关文件名必须与系统的当前代码页相符合。(虽然 ZIP 格式最近一次更新加入了使用 UTF8 编码文件名的选项,但是不能保证所遇到的 ZIP 文件都是新格式的,minizip 中似乎也没有针对此选项做什么动作。)

尾声

这是一篇低俗的文章,没有什么思想性。仅仅是一个小记。有不当之处欢迎批评指正。

 

祝大家中秋节快乐!

posted on 2010-09-22 23:57 溪流 阅读(41214) 评论(74)  编辑 收藏 引用 所属分类: C++

评论:
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-09-23 12:34 | ok
visio 2010 破解怎么下载  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-09-24 22:52 | Corner Zhang
不错 对我有用!  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-09-28 17:26 | tomren
及时雨!  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-09-29 10:46 | tomren
解压缩的时候如果多级目录会有问题,我那个里面有3层~~谢谢啦  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-09-29 20:48 | 溪流
@tomren
感谢告知,现在加班,等回去测试~  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-09-29 22:10 | 溪流
@tomren
谢谢指出,确实有此问题,已修复。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-09-30 16:04 | tomren
我只用到解压的,直接用zLib我不会~~  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-10-03 21:43 | roger
如果一次压缩几个文件要怎么办呢?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-10-04 00:23 | 溪流
@roger
目前我已给出的代码中,可以做到压缩一个目录。比如把文件都放在 aaa 目录下,然后用 ZipCompress(_T("aaa\\*"), _T("bbb.zip")) 就可以了。

如果文件处于不同目录中,请使用 MiniZip 的 API:

zipOpen64 后,对于每个文件,做如下事情
{
先zipOpenNewFileInZip,这里有个参数Zip中的文件名,可以用来组织Zip中的文件结构
再打开需要压入zip中区的文件,读取文件数据并使用zipWriteInFileInZip写入
最后zipCloseFileInZip
}
最后zipClose   回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-16 10:36 | Husiwa
楼主是BY人吧 呵呵  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-16 11:14 | 溪流
@Husiwa
BY是啥?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-16 11:34 | Husiwa
@溪流
啊 北邮。。呵呵 也许我记错了 好像在北邮人论坛上见过这个ID

你这个项目是2010的。。。我这只有2008的
改的我好辛苦啊,还没改完  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-16 13:04 | 溪流
@Husiwa
呵呵,偶不是by的~  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-25 14:42 | Alemon
@溪流
ZWZipExtract(_T("d:\\guoh.rar"), _T("d:\\"))
返回错误为,文件名 目录名或卷标语法不对,应该怎么写,有没有VC6.0的版本呢?谢谢  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-25 15:31 | 溪流
@Alemon
只能解ZIP,解不了RAR。
  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-25 20:08 | Alemon
@溪流
那个是笔误,改成ZIP后问题依旧,就是不知道为什么是那个错误提示  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-25 20:13 | Alemon
@溪流
因为手头没有2010,所以你的源码也没法用,就用了你的DLL版本,在压缩的时候就是报文件名 目录名或卷标语法不对,我主要用来解压缩文件夹

BOOL bRet = ZWZipCompress(_T("d:\\systemp.mdb"), _T("d:\\temp.zip"));

代码如上
  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2010-11-26 00:58 | 溪流
@Alemon
可能是编码问题吧,我的DLL是Unicode的,你的工程应该是_MBCS的吧。这样子试试:
BOOL bRet = ZWZipCompress(L"d:\\systemp.mdb", L"d:\\temp.zip");

  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-05-13 11:19 | 风声边界
拜读楼主的博客,写的很好,我已参照你的方法,写了压缩文件夹模块
但其中有个问题,就是如果在要压缩的文件夹中存在zip文件,该如何处理
直接将其当做普通文件创建,读取数据,写入数据,在解压的时候就会报错
不知道此类问题,楼主有何见解,  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-05-13 13:47 | 溪流
@风声边界
当作普通文件处理,ZIP格式保证了其中可以含有ZIP文件。
编译示例代码,运行 ZLibWrapTest.exe 测试看看?我试过好像没问题。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-05-13 20:38 | weihua1984
@溪流
简单的压缩一个zip文件到zip文件中确实没有问题
使用winrar工具解压刚压缩的zip文件没有问题,
使用zlib解压刚才的压缩的zip文件时出错了,我再检查检查,方便的话麻烦你也给看看这两种情况,验证一下
  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-05-13 20:47 | weihua1984
又测试了一遍,在我的机子上测试没有问题,今天再公司不知道哪出了点问题,谢谢!  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-05-27 10:12 | SOS
请问目录中含有空文件夹怎么压啊,你的代码中并没有处理这种情况  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-05-27 11:34 | 溪流
@SOS
那就 zipOpenNewFileInZip,然后直接 zipCloseFileInZip,不要写数据了
我记得处理过的,等下检查下  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-05-27 11:45 | 溪流
@SOS
嗯,我有处理的,目录的话 zipOpenNewFileInZip 里那个 ZIP中的文件名加一个“/”,然后不要添加数据直接zipCloseFileInZip就可以了  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-02 16:54 | violin
我要在vc6.0下用,改动会大吗?支持压缩多个文件不?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-02 17:56 | 溪流
@violin
如果用DLL或LIB的话,注意传入UNICODE字符串就可以了。
如果要源代码方式重用的话,不知道改动大不大。
支持多文件  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-02 21:12 | violin
@溪流
在vc6.0中我引入dll库,编译时报错Linking...
Main.obj : error LNK2001: unresolved external symbol "__declspec(dllimport) int __cdecl ZWZipExtract(char const *,char const *)" (__imp_?ZWZipExtract@@YAHPBD0@Z)
这是什么原因呢?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-02 21:33 | violin
@溪流
注:我已经将ZLibWrap.lib加入到input中去了  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-02 22:08 | 溪流
@violin
ZLibWrap.h 改一下,所有参数里的 LPCTSTR 中的 T 改成 W。(不是去掉 T,昨天打太快了说错了)  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-03 10:36 | violin
@溪流
呵呵,谢谢你的耐心回复。我按你今天的方式也弄了,LINK : fatal error LNK1196: invalid or corrupt import object: unknown version,我查了一下,估计vs2010编译的dll,在vc6.0中还是有问题。估计得把源码放在vc6.0中重新生成库才行。
还有就是昨天装了2010,结果打开你给的源码,想测试下代码的效果。结果编译不过,老是报atldef.h之类库文件出错。没用过2010,不知道怎么回事。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-03 11:37 | 溪流
@violin
可能真要重新编译吧,我也没试过这样的操作。
后面的2010,直接打开solution编译,应该就可以了的。你的问题我没碰到过,同不知道怎么回事。。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件[未登录] 2011-06-08 10:14 | neo
由于需要,我设置不是unicode环境,编译时说无法解析的外部符号 "__declspec(dllimport) int __cdecl ZWZipCompress(char const *,char const *)" (__imp_?ZWZipCompress@@YAHPBD0@Z),该符号在函数 _main 中被引用
怎么办  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件[未登录] 2011-06-08 10:41 | neo
看来用DLL不能用非UNICODE环境对吧?
那我想定义一个变量,比如char str[].然后在程序运行的时候对它赋值,然后作为ZWZIPCOMPRESS的一个输入参数,可是编译器提示无法转换成LPCTSTR,这怎么解决呢。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-09 00:10 | 溪流
@neo
看楼上的一些回答吧。
  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件[未登录] 2011-06-09 16:25 | neo
@溪流
楼上并没有说怎么转换,不过我已经解决了,用A2T函数来转换  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-23 09:38 | xx
你符号链接(软链接)怎么处理?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-23 13:25 | 溪流
@xx
软硬链接没有作特殊处理,看它们对 CreateFile 是否透明。这是两个层次的概念,窃以为不该越权去处理。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-23 16:47 | xx
文件属性?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-06-23 22:54 | 溪流
@xx
ZIP格式可能无法容纳文件属性以及NTFS权限等信息。好像就一个修改时间能保存吧。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-07-08 16:25 | 11
超过4G文件可压缩否  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-07-19 17:12 | cy
先下来看看。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-08-21 13:38 | 大傻(605351006@qq.com)
太有用了,非常感谢!  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-08-26 09:51 | py
如果压缩要求从内存中直接压缩到内存呢?
解压要求从数据流直接解压到内存中呢?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-08-27 23:52 | 溪流
@py
这个跟ZIP文件无关了吧。貌似ZLIB有提供数据压缩接口,好像直接叫compress什么的?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-09-01 09:19 | Samson
如何使用crc呢?好像没有使用crc的接口  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-10-29 18:46 | weihua1984
今天使用zlib又出现问题了
用zlib封装了压缩和加压缩两个接口
1、文件都是gbk的时候,压缩和解压缩都没有问题
2、文件有utf8个时候的时候,压缩,没有问题,但是使用我的解压缩接口时,解压时候,此时用windows"右击解压" 还是可以解压的

所在现在不清楚是我压缩的问题还是解压的问题

是不是由必要考虑文本编码在压缩时转换的问题

在局限性中你所说的

虽然 ZIP 格式最近一次更新加入了使用 UTF8 编码文件名的选项,但是不能保证所遇到的 ZIP 文件都是新格式的,minizip 中似乎也没有针对此选项做什么动作。

我应该如何理解和应对哪  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-11-17 01:06 | 溪流
@weihua1984
参考 http://www.pkware.com/documents/casestudies/APPNOTE.TXT 中的说明,需要将对应文件项的 General Purpose Bit Flag 标志的 BIT 11 设上。

在 minizip 中,可以使用 zipOpenNewFileInZip4 代替上面的 zipOpenNewFileInZip,zipOpenNewFileInZip4 最后的那个参数就是刚才说的 Flag,给他传个 0x800,同时文件名传 utf-8 的,就可以了,试过 WinRAR 能顺利解压。不过有个问题,如果目录名这样搞,似乎 WinRAR 不能解,不知道应该怎么弄。

同时,解压的时候由 unzGetCurrentFileInfo64 取到 unz_file_info64 后,也需要判断一下其 flag 成员的 BIT 11 是否设上,然后根据不同的编码解析文件名。

刚才说的目录名,如果那样搞,只要解压的时候作对,自己解自己是没问题的,只是 WinRAR 解不了,,,待研究。

http://zlibwrap.codeplex.com/ 上代码已更新。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2011-11-17 01:35 | 溪流
哦,知道了,zipOpenNewFileInZip4 的时候 FileInfo.external_fa 设上 FILE_ATTRIBUTE_DIRECTORY 表示此项是目录。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-01-04 22:58 | dafan
哥们,测试下,貌似不支持中文文件名
无论是生成的目的文件中文还是待压缩文件夹里包含中文。
你也测试下吧 :)  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-01-04 22:59 | dafan
包含中文文件@dafan
  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-01-05 21:03 | 溪流
@dafan
可以啊,专门为这个问题测过好多时间。请问你的用例是怎样的?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-01-06 10:47 | dafan
@溪流
奇怪了 我这里就是不行
我使用的是win7 英文版操作系统
就是直接在文件夹里放一个中文文件  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-01-06 10:47 | dafan
此外,把文件存储在包含中文的路径下也不行呢  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-01-06 23:25 | 溪流
@dafan
看看 控制面板=>区域和语言选项=>管理=>非Unicode程序的语言 那里设置成什么?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-01-07 16:07 | 溪流
@dafan
如果那里设置不是中文的话,请压缩的时候选择 utf8 文件名。
ZipCompress 以及 ZWZipCompress 中的最后一个参数 bUtf8 设为 true 即可,如果是用 ZLibWrapText.exe 测试的,把 /utf8 设上。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件[未登录] 2012-10-15 14:32 | loong
实际上楼主的接口是用的minizip的接口在用

最近想找找直接使用zlib的接口,不用minizip的接口。

因为minizip这个库 在他的网站上没有找到license。怕出问题。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-10-15 14:54 | 溪流
@loong
没错。
不过在minizip在zip.h/unzip.h中有版权说明。
Condition of use and distribution are the same than zlib
在contrib\minizip\MiniZip64_info.txt中也有版权说明。

如果不用minizip的话,相当于要自己解析zip文件格式了。  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-12-25 01:20 | NuClient
請問用winrar壓縮的zip檔案 能用minizip解開嗎  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2012-12-25 13:47 | 溪流
@NuClient
理论上应该可以吧,zip格式好久没变过了吧。试一下呗  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件[未登录] 2012-12-31 14:25 | ben
学习了  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2013-04-06 15:49 | lycheng
LZ 你好
如果是使用 zip 2.0 加密的zip 文件就无法解压,我看源代码页好像没有通过调用解压那部分函数,不知道能否看下?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2013-05-04 23:04 | 溪流
@lycheng
不好意思回复晚了。
我这边确实没有支持加密的文件。
不过minizip看上去是支持的,试试把unzOpenCurrentFile换成unzOpenCurrentFilePassword?  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2013-05-12 21:26 | lycheng
@溪流

好的,谢谢你了
  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2013-10-29 09:00 | lbx
博主 请问你的源码添加crc校验了吗?希望能有这部分的代码  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2014-02-22 16:32 | 依彩帆
# re: 使用 ZLib 压缩/解压 ZIP 文件[未登录] 2014-05-16 11:10 | dd
楼主 少了FindClose 吧  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件[未登录] 2014-05-16 11:46 | dd
通过LOKI_ON_BLOCK_EXIT实现了。。。@dd  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2014-11-14 15:15 | OH NO
1>ZLibWrapLib.lib(ZLibWrapLib.obj) : error LNK2001: 无法解析的外部符号 "class ATL::CAtlStringMgr ATL::g_strmgr" (?g_strmgr@ATL@@3VCAtlStringMgr@1@A)  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2014-11-14 21:00 | 溪流
@OH NO
可能我们用的编译器不一样,下载代码重新编译呗  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2015-09-24 19:39 | bowman
谢博主,项目中用了好久了  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2015-09-29 16:20 | 胡峻华
非常具有实用性的代码。
感谢博主分享。
学习了!  回复  更多评论
  
# re: 使用 ZLib 压缩/解压 ZIP 文件 2016-05-12 15:40 | shellxi
博主,我用uncompress解压文件的时候必须是compress自己压缩的文件,用博主提供的api也一样,有没有什么方法是可以解压比如WinRAR压缩的zip文件的啊?一定要回答我啊!!!工作上要用弄了好久都不行!!!跪谢!  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理