最近在给项目加一些压缩和解压缩的工作。其中收录了一些 比较好的网址:
1.gzip,zip,zlib,7z,tar介绍
http://blog.csdn.net/lanmenghcc/article/details/40071923
2.zip压缩算法介绍
http://blog.csdn.net/a237443534/article/details/39857543
2.ziplib库 地址
https://nih.at/libzip/
3.zip结构 网址
http://blog.sina.com.cn/s/blog_4c3591bd0100zzm6.html
正文:由于项目中已经有了 zlib库(1.1.3)版本,所以 一开始准备 使用 这个库做一些解压缩的工作。后来发现 这个版本的 库 只 支持内存压缩,compress 和 uncompress函数,而且 压缩 格式 还是 gzip 。linux 中 常见的 压缩格式 .ta.gz 中的 gz 指的 就是 这个格式。ta 是 打包功能,gz 和 压缩功能,必须 两个程序 一起使用 才可以 压缩 文件夹 和 解压缩 文件夹。zip格式 是打包 和 压缩 都支持的。
后来了解到有ziplib库支持 zip压缩 和 解压缩,不过 后来 没有 使用这个库。(ps:由于 领导 不让用,呵呵,就是这么霸气)。
后来 又下载了最新的 zlib库,通过 minizip模块 来进行 zip压缩 和 解压缩。
这个是网盘的地址,包括了zlib1.2.8版本,ziplib1.1.3版本和一个 minizip的测试代码。
https://pan.baidu.com/s/1geKuTnt
获取解压缩的代码:
ZEXTRACT_API int GetFileInZip(CMemBuffer& buffer, const char* zfn, const char* fname, const char* password)
{
unzFile uf = unzOpen(zfn);
if (NULL == uf)
{
printf("unzOpen failed...\n");
return -1;
}
int err = unzLocateFile(uf, fname, 0);
if (UNZ_OK != err)
{
printf("GetFileInZip unzLocateFile failed... error:%d\n");
return err;
}
unz_file_info file_info;
char filename_inzip[256];
err = unzGetCurrentFileInfo(uf, &file_info, filename_inzip, sizeof(filename_inzip), NULL, 0, NULL, 0);
if (UNZ_OK != err)
{
printf("unzGetCurrentFileInfo failed... error:%d\n", err);
return err;
}
err = unzOpenCurrentFilePassword(uf, password);
if (UNZ_OK != err)
{
printf("unzOpenCurrentFilePassword failed... error:%d\n", err);
return err;
}
char* pBuf