• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C++Zip压缩解压缩示例(支持递归压缩)

C++Zip压缩解压缩示例(支持递归压缩)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了哈夫曼压缩c++,c++软件工程师培训,c++,c++软件下载,c++培训等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com



第三方函数、头文件、测试工程下载地址:http://pan.baidu.com/s/1gSfKo

namespace ZipUtils
{
    // ------------------------------------------------------------------------------------------------------------------------
    // Summary:
    //   解压zip文件到指定路径, 并返回解压文件路径和文件名。
    // Parameters:
    //   lpszZipFullName   - 待解压 zip压缩包所在文件夹路径和zip压缩名称; 如"D://00//1.zip"。
    //   szFilePathArr     - 保存的解压后文件的文件名;如"1.jpg"。   
    //   lpszUnZipPath     - 解压出来的文件 所存放位置的完整路径; 如 “D://01”
    //                       此参数省略时,默认解压到exe程序所在文件夹下。
    // Returns:
    //   解压成功返回ZR_OK,解压失败返回错误码。
    // ------------------------------------------------------------------------------------------------------------------------
    ZRESULT ExtractZipToDir(LPCTSTR lpszZipFullName, CStringArray& szFilePathArr, LPCTSTR lpszUnZipPath = NULL);

    // ------------------------------------------------------------------------------------------------------------------------
    // Summary:
    //   压缩指定路径下的文件,并保存压缩包到指定路径。
    // Parameters:
    //   lpszSrcPath        - 待压缩文件所在的路径; 如"D://00"。
    //   lpszDestPath       - 压缩完成后,存放压缩包的路径。
    //                        此参数省略时,默认存放路径为exe程序所在文件的路径。
    //   lpszZipName        - 压缩完成后,压缩的名称;如“MySkin.zip”。
    // Returns:
    //   压缩成功返回ZR_OK,压缩失败返回错误码。
    // ------------------------------------------------------------------------------------------------------------------------
    ZRESULT CompressDirToZip(LPCTSTR lpszSrcPath, LPCTSTR lpszZipName, LPCTSTR lpszDestPath = NULL);
}
</div>

namespace ZipUtils
{
    // 全局变量
    int g_nCount = 0;

    ZRESULT ExtractZipToDir(LPCTSTR lpszZipFullName, CStringArray& szFilePathArr, LPCTSTR lpszUnZipPath)
    {
        TCHAR buffer[MAX_PATH] = {0};
        CString strUnZipPath = lpszUnZipPath;
        DWORD zResult = ZR_OK;

        if (!strUnZipPath.IsEmpty())
        {
            // 如果文件路径不存在先创建,存在不做任何修改
            SHCreateDirectoryEx(NULL, lpszUnZipPath, NULL);
        }
        else
        {
            GetCurrentDirectory(MAX_PATH, (LPTSTR)&buffer);
            strUnZipPath = buffer;
            SHCreateDirectoryEx(NULL, strUnZipPath, NULL);
        }

        HZIP hz = OpenZip(lpszZipFullName, 0);
        ZIPENTRY ze;

        GetZipItem(hz, -1, &ze);
        int numitems = ze.index;

        for (int zi = 0; zi < numitems; zi++)
        {
            ZIPENTRY ze;
            GetZipItem(hz,zi,&ze);
            zResult = UnzipItem(hz, zi, (CString)strUnZipPath+_T("\\")+ze.name);  
            szFilePathArr.Add(ze.name);
            if (zResult != ZR_OK)
            {
#ifndef _UNICODE
                // 判断文件是否存在
                if (_access(szFilePathArr[zi], 0))   
                {
                    // 文件不存在的时候
                    return zResult;
                }
#else
                if (_access((char *)(LPTSTR)(LPCTSTR)szFilePathArr[zi], 0))   
                {
                    // 文件不存在的时候
                    return zResult;
                }
#endif
            }
        }

        CloseZip(hz);
        return zResult;
    }

    ZRESULT DirToZip(LPCTSTR lpszSrcPath, LPCTSTR lpszZipName, HZIP& hz, LPCTSTR lpszDestPath)
    {
        static CString strFileName;
        g_nCount++;
        DWORD zResult = ZR_OK;
        TCHAR buffer[MAX_PATH] = {0};

        CString strDestPath = lpszDestPath;

     

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解析C++哈夫曼树编码和译码的实现
  • C++实现哈夫曼树简单创建与遍历的方法
  • C++Zip压缩解压缩示例(支持递归压缩)

相关文章

  • 2017-05-28VC++实现文件与应用程序关联的方法(注册表修改)
  • 2017-05-28深入理解线程安全与Singleton
  • 2017-05-28VC MFC非模态对话框的实现方法
  • 2017-05-28深入解析函数指针与返回函数的指针
  • 2017-12-31素数筛选法
  • 2017-11-18使用opencv把图片拼接成视频
  • 2017-05-28C++在成员函数中使用STL的find_if函数实例
  • 2017-05-28C++设计模式之抽象工厂模式
  • 2017-05-28C语言基础知识变量的作用域和存储方式详细介绍
  • 2017-05-28C++写注册表项实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • VC基于ADO技术访问数据库的方法
    • linux c语言操作数据库(连接sqlite数据库)
    • c语言生成随机数的方法(获得一组不同的随机数)
    • operator new在C++中的各种写法总结
    • 用c语言根据可变参数合成字符串的实现代码
    • C++实现简单遗传算法
    • UVa11402 Ahoy, Pirates!
    • C++实现打印1到最大的n位数
    • Swift编程中的泛型解析
    • C++中图片重命名实现代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有