首页 > 编程知识 正文

zlib压缩数据格式,zlib库地址

时间:2023-05-04 01:33:01 阅读:221750 作者:3978

接之前的一篇文章

http://blog.csdn.net/ljh0302/article/details/50384457

现在详细地给出利用zlib对.zip文件进行解压缩的过程:

参考文章(非常详细):http://m.blog.csdn.net/blog/wiceti9er/9252295

#include "unzip.h"#include "zip.h"#include <iostream>#include <fstream>using namespace std;#pragma comment(lib,"zdll.lib")const char *filename = "dev.txt";/*这里的压缩文件dev.zip中只包含一个文件dev.txt所以循环遍历实际上只进行了一次,当然如果有多个文件可以依次获取*/int main(){//打开zip文件路径unzFile zFile = unzOpen64("E:/dev.zip");if(NULL == zFile){cout<<"打开文件失败"<<endl;return 0;}//获取压缩文件的全局信息unz_global_info64 zGlobalInfo;if(unzGetGlobalInfo64(zFile,&zGlobalInfo) != UNZ_OK){cout<<"全局信息出错"<<endl;return 0;}//循环遍历所有文件unz_file_info64 zFileInfo;unsigned int num = 512;char * fileName = new char[num];char *fileData = new char[500*1024];for(int i=0; i< zGlobalInfo.number_entry;++i){//遍历所有文件if(UNZ_OK != unzGetCurrentFileInfo64(zFile,&zFileInfo,fileName,num,NULL,0,NULL,0)){cout<<"得到当前文件信息出错"<<endl;return 0;}if(UNZ_OK != unzOpenCurrentFile(zFile)){cout<<"打开压缩包中"<<fileName<<"文件失败"<<endl;return 0;}int fileLength = zFileInfo.uncompressed_size;int len;//解压缩文件len = unzReadCurrentFile(zFile,(voidp)fileData,fileLength);fileData[len] = '';//写入到解压缩后的文件中ofstream file(filename,ios::out|ios::binary);if(!file.good()){cout<<"file not good"<<endl;return 0;}file.seekp(0,ios::beg);file.write(fileData,len);file.close();unzCloseCurrentFile(zFile);unzGoToNextFile(zFile);}unzClose(zFile);delete[] fileData;return 0;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。