C++⽣成压缩包解压压缩包
版本
VS2013
⽅法1
调⽤第三⽅WinRAR软件的接⼝直接⽣成压缩包
void CDemo1Dlg::OnBnClickedButton1()
{
// TODO:  在此添加控件通知处理程序代码
//开始打包
string cmd_str = "\"C:\\Program Files\\WinRAR\\\"";//调⽤的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
挺好⽤的。库⽂件也有⾃带的参考例⼦
问题1:
解决⽅法:将unzip.cpp和zip.cpp右键属性-设置成不使⽤预编译头
问题2:
解决⽅法是:到【项⽬属性】,点击【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⽇
压缩文件怎么解压2021年10⽉12⽇补充
补充⼀个调⽤zip_utils_src库解压zip压缩包的例⼦
1.新建⼀个控制台项⽬(也可以参考下它⾃带的那个控制台例⼦是怎么搭建的)
代码
#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();
return0;
}
演⽰
相关直接参考它⾃带的例⼦
阿飞
2021年10⽉12⽇