利用ZipArchive库进行压缩和解压文件

本文介绍如何利用ZipArchive开源库实现文件及文件夹的压缩与解压功能,提供具体的C++代码实现,并给出压缩文件夹的示例。

最近需要修改以前做的一个下载程序,主要是增加压缩和解压的功能,以减少网络带宽的消耗.去论坛咨询了一下网友,于是借助开源库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-1false );    
    zipArchive.Close();

 

 

转载于:https://www.cnblogs.com/fangkm/archive/2009/04/16/1437003.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值