zoukankan      html  css  js  c++  java
  • C++生成压缩包,解压压缩包

    • 版本

    VS2013

    • 方法1

    调用第三方WinRAR软件的接口直接生成压缩包

    void CDemo1Dlg::OnBnClickedButton1()
    {
        // TODO:  在此添加控件通知处理程序代码
    
        //开始打包
        string cmd_str = ""C:\Program Files\WinRAR\Rar.exe"";//调用的winrar文件
        string rar_path = "D:\1\111.zip";//生成的压缩包文件
    
        //需要被压缩的文件
        string rar_files = "D:\1\1.txt";
        rar_files = rar_files + " " + "D:\1\2.txt";
    
        //启动进程命令行传参调用
        SHELLEXECUTEINFO ShExecInfo;
        string parameters = " a -k -m1 -ep1 -r -o+ " + rar_path + " " + rar_files;
        ShExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
        ShExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS;
        ShExecInfo.hwnd = NULL;
        ShExecInfo.lpVerb = "open";//多种类别有 "explorer" "print" 等
        ShExecInfo.lpFile = cmd_str.c_str();//exe 路径    
        ShExecInfo.lpParameters = parameters.c_str();//参数
        ShExecInfo.lpDirectory = NULL;
        ShExecInfo.nShow = SW_HIDE;//
        ShExecInfo.hInstApp = NULL;
        ShellExecuteEx(&ShExecInfo);
        WaitForSingleObject(ShExecInfo.hProcess, 3 * 1000);
    }
    • 演示

    • 方法2

    这个方法是网友小白鼠告诉我的,库文件也是从他论坛下载的,出处 http://www.vmould.cn/vip/forum.php?mod=viewthread&tid=550&extra=page%3D1

    挺好用的。库文件也有自带的参考例子

    附加一份别人博客的参考资料https://blog.csdn.net/wangshubo1989/article/details/52847891

    问题1:

     解决方法:将unzip.cpp和zip.cpp右键属性-设置成不使用预编译头

    参考资料:https://blog.csdn.net/cindywry/article/details/89352591

    问题2:

     参考资料:https://blog.csdn.net/qq_38721302/article/details/82850292

    解决方法是:找到【项目属性】,点击【C++】里的【预处理器】,对【预处理器】进行编辑,在里面加入一段代码:_CRT_SECURE_NO_WARNINGS。

    编译通过

    #include "zip.h"
    #include "unzip.h"
    
    
    void CDemo2Dlg::OnBnClickedButton1()
    {
        // TODO:  在此添加控件通知处理程序代码
    
        //创建压缩包
        HZIP hz;
        hz = CreateZip(_T("D:\1\simple1.zip"), 0);
        ZipAdd(hz, _T("这是1.txt"), _T("D:\1\1.txt"));
        ZipAdd(hz, _T("这是2.txt"), _T("D:\1\2.txt"));
        CloseZip(hz);
    
    }
    void CDemo2Dlg::OnBnClickedButton2()
    {
        // TODO:  在此添加控件通知处理程序代码
    
        //遍历压缩包内部文件名进行解压
        HZIP hz = OpenZip("D:\1\simple1.zip", 0);
        ZIPENTRY ze; GetZipItem(hz, -1, &ze); int numitems = ze.index;
        for (int i = 0; i < numitems; i++)
        {
            GetZipItem(hz, i, &ze);
            UnzipItem(hz, i, ze.name);
    
            //打印
            AfxMessageBox(ze.name);
        }
        CloseZip(hz);
    
    }
    • 演示

     更多用法,看类库里自带的例子参考吧

    Caesar卢尚宇

    2021年2月6日

    作者: 阿飞

    出处: https://www.cnblogs.com/nxopen2018/>

    关于作者:......

    如有问题, 可在底部(留言)咨询.

  • 相关阅读:
    字符统计和滑动窗口
    字典树应用及用哈希表代替
    迷宫里的动态规划应用
    求所有排列中的第 i 个排列的问题
    最大子串和问题
    二分查找、变形及应用
    前 n 个数原址排序的问题
    LeetCode 32 括号匹配
    11.常用的API
    10.正则表达式
  • 原文地址:https://www.cnblogs.com/nxopen2018/p/14383368.html
Copyright © 2011-2022 走看看