最近需要修改以前做的一个下载程序,主要是增加压缩和解压的功能,以减少网络带宽的消耗.去论坛咨询了一下网友,于是借助开源库ZipArchive来实现我要的功能。
初步看了一下ZipArchive文档,简单地封装了一下压缩和解压功能.代码如下:
/* * CompressZipFile: 压缩文件 * lpszFile: 需要压缩的文件 * lpszZipFile: 要压缩到的目标文件 * bAppend: 标志是否添加到现有压缩文件 * 返回压缩成功与否 */ BOOL CompressZipFile( LPCTSTR lpszFile, LPCTSTR lpszZipFile, BOOL bAppend = FALSE ) { //如果是追加到现有压缩文件,但现有压缩文件不存在的话 直接返回失败 if( bAppend && ( !::PathFileExists( lpszZipFile ) ) ) return FALSE; int nMode = bAppend ? CZipArchive::zipOpen : CZipArchive::zipCreate; CZipArchive zipArchive; if( !zipArchive.Open( lpszZipFile, nMode ) ) return FALSE; //获取路径中的文件名部分 TCHAR szFile[MAX_PATH]; lstrcpy( szFile, lpszFile ); ::PathStripPath( szFile ); bool bRet = zipArchive.AddNewFile( lpszFile, szFile ); zipArchive.Close(); return bRet; } /* * ExtractZipFile : 解压指定文件 * lpszZipFile: 要解压的文件 * lpszDestPath: 指定解压到的目录 * 返回压缩成功与否 */ BOOL ExtractZipFile( LPCTSTR lpszZipFile, LPCTSTR lpszDestPath ) { if( !::PathFileExists( lpszZipFile )) return FALSE; CZipArchive zipArchive; if( !zipArchive.Open( lpszZipFile, CZipArchive::zipOpenReadOnly ) ) return FALSE; for ( int nIndex = 0; nIndex < zipArchive.GetCount (); nIndex++ ) { if( !zipArchive.ExtractFile( (WORD)nIndex, lpszDestPath ) ) break; } zipArchive.Close(); return TRUE; }
CZipArchive zipArchive; if( !zipArchive.Open( _T("D:\\手绘古景.zip") , CZipArchive::zipCreate ) ) return; //压缩目录下的所有文件,第三个参数指示是否递归压缩子目录,第五个参数指示是否连文件夹目录一起压缩 zipArchive.AddNewFiles( _T("D:\\手绘古景\\"), _T("*.*"), true, -1, false ); zipArchive.Close();