利用ZipArchive库进行压缩和解压文件
2009-04-16 10:29
417 查看
最近需要修改以前做的一个下载程序,主要是增加压缩和解压的功能,以减少网络带宽的消耗.去论坛咨询了一下网友,于是借助开源库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;
}
压缩文件夹可以参考如下的Demo:
CZipArchive zipArchive;
if( !zipArchive.Open( _T("D:\\手绘古景.zip") , CZipArchive::zipCreate ) )
return;
//压缩目录下的所有文件,第三个参数指示是否递归压缩子目录,第五个参数指示是否连文件夹目录一起压缩
zipArchive.AddNewFiles( _T("D:\\手绘古景\\"), _T("*.*"), true, -1, false );
zipArchive.Close();
初步看了一下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;
}
压缩文件夹可以参考如下的Demo:
CZipArchive zipArchive;
if( !zipArchive.Open( _T("D:\\手绘古景.zip") , CZipArchive::zipCreate ) )
return;
//压缩目录下的所有文件,第三个参数指示是否递归压缩子目录,第五个参数指示是否连文件夹目录一起压缩
zipArchive.AddNewFiles( _T("D:\\手绘古景\\"), _T("*.*"), true, -1, false );
zipArchive.Close();
相关文章推荐
- 利用ZipArchive库进行压缩和解压文件
- 利用c#自带的类对文件进行压缩和解压处理
- (一二九)获取文件的MineType、利用SSZipArchive进行压缩解压
- (一二九)获取文件的MineType、利用SSZipArchive进行压缩解压
- Qt使用QuaZip对文件进行压缩解压操作
- 在C#中利用SharpZipLib进行文件的压缩和解压缩
- Lucene4.2源码解析之fdt和fdx文件的读写(续)——fdx文件存储一个个的Block,每个Block管理着一批Chunk,通过docID读取到document需要完成Segment、Block、Chunk、document四级查询,引入了LZ4算法对fdt的chunk docs进行了实时压缩/解压
- 利用SharpZipLib进行文件的压缩和解压缩
- 在C#中利用SharpZipLib进行文件的压缩和解压缩收藏
- 利用SharpZipLib进行文件的压缩和解压缩
- Ubuntu对各种格式的压缩文件进行压缩与解压命令
- 在C#中利用SharpZipLib进行文件的压缩和解压缩(转)
- 使用 C# 对文件进行压缩和解压
- 使用PHP对文件进行压缩解压(zip)
- 在C#中利用SharpZipLib进行文件的压缩和解压缩
- 使用C#2.0进行文件压缩和解压
- 使用dcm4che3对jpeg压缩的dcm文件进行解压
- 利用antzip包来进行解压与压缩
- 7z 命令行 进行单文件极限压缩与解压
- 利用Qt的qCompress和qUncompress来压缩和解压文件