• 利用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();
  • 相关阅读:
    java多线程:并发包中ConcurrentHashMap和jdk的HashMap的对比
    java编程之:Unsafe类
    mave之:java的web项目必须要的三个jar的pom形式
    java多线程:并发包中ReentrantReadWriteLock读写锁的锁降级模板
    java多线程:并发包中ReentrantReadWriteLock读写锁的原理
    java编程之:按位与运算,等运算规则
    java多线程:jdk并发包的总结(转载)
    liunx之:wps for liunx的安装经验
    mysql中enum类型理解
    MySQL类型float double decimal的区别
  • 原文地址:https://www.cnblogs.com/fangkm/p/1437003.html
Copyright © 2020-2023  润新知