查了很多资料,就直接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应该是把文件当成字符串直接压缩处理了。