ZipArchive压缩包的使用
v 源代码包:ZipArchive,生成动态链接库(DLL)
v 此DLL依赖的lib文件:szlib.lib; zlib.lib
v 使用ZipArchive的工程需要添加动态链接库及相关头文件
v 封装对ZipArchive包的操作:CRoleZip类
○ 主要成员变量:m_zipFile/m_tempDirectory
○ 主要成员函数:PackFiles/UnpackFiles
v 压缩文件
主要代码:
View Code
1 //检测文件是否存在 2 CZipArchive zip; 3 If(zip.FileExists(m_zipFile)) 4 { 5 DeleteFile(m_zipFile); 6 } 7 //创建文件 8 zip.Open(m_zipFile, CZipArchive::create, 1457500); 9 //压缩文件 10 CFileFind fileFind; 11 BOOL b = fileFind.FindFile(tempDirectory); 12 CString pathFile; 13 while (b) 14 { 15 b = fileFind.FindNextFile(); 16 pathFile = fileFind.GetFileName(); 17 if (fileFind.IsDots()) 18 continue; 19 20 if ( !fileFind.IsDirectory()) 21 { 22 zip.AddNewFile(pathFile, -1, false); 23 } 24 } 25 //关闭 26 zip.Close();
v 解压文件
主要代码:
//打开 CZipArchive zipArchive; zipArchive.Open(m_zipFile, CZipArchive::open, 0 ); //获取文件数目 CDWordArray da ; int count = zipArchive.GetNoEntries() ; for(int k = 0 ; k < count ; k++) da.Add(k) ; //解压文件 for (int i = 0; i < da.GetSize(); i++) { zipArchive.ExtractFile((WORD)da[i],m_tempDirectory , true, NULL, NULL, NULL); } //关闭 zipArchive.Close();
v 问题及解决
○ 加入zipArchive之后,需要编译两次才能成功
因为link里注册了输出,将”register output“项置为no。
○ 压缩之后包含目录下所有的文件
将压缩类的临时文件夹设为用户选择的目录下添加的一个temp文件夹,而不是用户选择的目录,并且每次使用时清空一下。