zoukankan      html  css  js  c++  java
  • 利用ZipArchive库进行压缩和解压文件

    最近需要修改以前做的一个下载程序,主要是增加压缩和解压的功能,以减少网络带宽的消耗.去论坛咨询了一下网友,于是借助开源库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();
  • 相关阅读:
    使用squid代理后某些网站无法访问的解决办法(3.1.7版本)
    如何高效设计游戏——从抽奖模型到圆桌算法(下)附VBA教程&战斗模拟器
    squid代理服务器泄露客户ip和服务器信息的解决
    分享squid缓存服务器配置之conf配置文件的详细介绍
    如何高效设计游戏——从抽奖模型到圆桌算法
    在linux下成功使用西部数据高级格式化的硬盘
    squid 高级篇
    squid禁止多线程并发下载的简单方法
    jquery实现搜索框类似提示功
    关于phoneGap camera照片放置的位置问题
  • 原文地址:https://www.cnblogs.com/fangkm/p/1437003.html
Copyright © 2011-2022 走看看