C语言解压标准ZIP文件到内存

查了很多资料,就直接baidu “C语言怎么解压ZIP文件”,被坑了一把,说使用库zlib,然后去压缩zip文件,解压zip文件,我做了一些测试,然后就发现 —— 完全解压不了好吧!!!我的压缩包中一般只有一个文件,有的时候会有两个文件,但是使用gzOpen也好,uncompress也好,都解压不了,gzOpen会显示大小一致,uncompress良心一点,会给一个-3的返回值,告诉你的文件有损坏。

但是我的文件在解压工具下是可以解压的,最后没有办法,找到了一个开源的C语言解压zip的工具的源码,然后把里面的代码扒出来一看,发现使用的是下面的api:

                unzFile zFile;
		zFile = unzOpen64(_fileName);
		unzOpenCurrentFile(zFile);
		NULL_ERROR(_fileName, "the filename is empty\n");
		OPEN_FILE_ERROR(zFile, "bzFile is failed\n");
		this->_readSize = unzReadCurrentFile(zFile, this->_Data, 120 * 1024 *     1024);
		unzCloseCurrentFile(zFile);
		READ_FILE_ERROR(this->_readSize, "readSize is smaller\n");

使用unzOpen64 获取文件描述符之后,使用unzOpenCurrent打开文件,后就可以读了,不管是一次性直接读出来还是写个while循环读都可以,api就是unzReadCurrentFile。

读完之后记得关掉,API: unzCloseCurrentFile

然后回头再去看gzopen和uncompress,发现其实人家也没有错,只不过人家是把整个文件都做了一个压缩,然后你会发现使用compress函数压缩之后,是用一般的解压软件解压不了的,必须使用uncompress来解压。换句话说compress应该是把文件当成字符串直接压缩处理了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ym影子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值