• 版本

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);
}
  • 演示

C++生成压缩包,解压压缩包

  • 方法2

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

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

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

 

问题1:

C++生成压缩包,解压压缩包

 

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

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

C++生成压缩包,解压压缩包

 

问题2:

C++生成压缩包,解压压缩包

 

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

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

编译通过

C++生成压缩包,解压压缩包

 

#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);

}
  • 演示

C++生成压缩包,解压压缩包

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

 

Caesar卢尚宇

2021年2月6日

 

2021年10月12日补充

补充一个调用zip_utils_src库解压zip压缩包的例子

1.新建一个控制台项目(也可以参考下它自带的那个控制台例子是怎么搭建的)

C++生成压缩包,解压压缩包

 C++生成压缩包,解压压缩包

 代码

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include "zip.h"
#include "unzip.h"




int main()
{
    //遍历压缩包内部文件名进行解压
    SetCurrentDirectoryA("D:\\1");//将进程的工作目录移动到该参数所指的目录下,不设置的话,该目录为输出.exe的默认文件路径
    HZIP hz = OpenZip("D:\\1\\1.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);

        //打印
        printf(ze.name);
        printf("\n");
    }
    CloseZip(hz);


    getchar();

    return 0;
}

演示

C++生成压缩包,解压压缩包

相关直接参考它自带的例子

C++生成压缩包,解压压缩包

 C++生成压缩包,解压压缩包

C++生成压缩包,解压压缩包

 

阿飞

2021年10月12日

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-14
  • 2021-11-21
  • 2021-11-29
  • 2021-06-15
  • 2021-07-07
猜你喜欢
  • 2021-11-01
  • 2021-07-01
  • 2022-01-23
  • 2022-01-21
  • 2022-12-23
  • 2022-12-23
  • 2021-09-25
相关资源
相似解决方案