close
文章出處

最近需要修改以前做的一個下載程序,主要是增加壓縮和解壓的功能,以減少網絡帶寬的消耗.去論壇咨詢了一下網友,于是借助開源庫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();

 

 


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 AutoPoster 的頭像
    AutoPoster

    互聯網 - 大數據

    AutoPoster 發表在 痞客邦 留言(0) 人氣()