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();
  • 相关阅读:
    shell 指定范围产生随机数
    shell脚本比较两个数大小
    Shell 脚本实现随机抽取班级学生
    linux通过挂载系统光盘搭建本地yum仓库的方法
    kuberenetes 上使用helm部署rancher如何卸载干净
    Windows 下 左Ctrl和Caps交换
    C#笔记 -- 协变、逆变
    Python 读取window下UTF-8-BOM 文件
    生成命令行程序使用脚本
    ffmpeg 命令小记
  • 原文地址:https://www.cnblogs.com/fangkm/p/1437003.html
Copyright © 2011-2022 走看看