#压缩# C++压缩与解压常见方案
共 5899字,需浏览 12分钟
·
2024-11-29 22:24
“ 文章所涉及内容更多来自网络,在此声明,并感谢知识的贡献者!”
压缩的格式
—
压缩的格式
RAR和ZIP是两种不同的压缩格式,它们使用是不同的压缩算法。zip是公开免费的,rar是私有的,申请了专利,一般情况下,rar的压缩率更高,即同文件以.rar格式压缩出来的要比.zip小。
除此之外,还有兼容性问题,能压缩和解压.rar格式的软件也可压缩和解压.zip文件,反之不行。
zstd
—
Zstd 简介
Zstandard(缩写为Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法。Zstandard在设计上与DEFLATE(.zip、gzip)算法有着差不多的压缩比,但有更高的压缩和解压缩速度。生成和解码 .zst 格式。
Zstd 环境配置
在项目中包含头文件#include "zstd/zstd.h"
//#pragma comment(lib,"libzstd.lib");
在项目exe目录下面加入libzstd.dll文件
在项目lib文件夹(或者其他什么文件夹)加入libzstd.lib
Zstd 常见接口
- 使用ZSTD_compressBound获取最大压缩缓冲区大小,然后申请缓冲区;
- 使用ZSTD_compress进行压缩
- 可以使用ZSTD_getDecompressedSize来获取压缩后最大缓冲区大小;来申请解压缓冲区;
解压的方案
—
解压的方案
基于zib库的文件解压缩
(31条消息) C++ 使用zlib开源库的minizip解压缩文件及文件夹_幽_篁的博客-CSDN博客_c++ minizip
https://blog.csdn.net/hallyz945/article/details/117856896
基于zipper库的文件解压缩
C++压缩库zipper的使用
https://blog.csdn.net/u014552102/article/details/112387107
基于7-zip和winar的文件解压缩
使用7-zip和winrar解压文件,以及文件解包
http://mail.itocm.com/a/13F7AF59F4464A7D906E22BFE759AAA3
https://blog.csdn.net/llmys/article/details/87893606
https://blog.csdn.net/u011718663/article/details/119574759
https://www.pudn.com/news/6228dcf29ddf223e1ad2933b.html
C++中,system的神级用法总和,实现用C++操作系统
https://blog.csdn.net/eeeeaaddf/article/details/125185727https://blog.csdn.net/llmys/article/details/87893606
https://www.52pojie.cn/thread-1340458-1-1.html
基于ziputils库的文件解压缩
环境配置
Ziputils官网下载文件:
Zip Utils - Clean, Elegant, Simple, C++/Win32 - CodeProject
https://www.codeproject.com/Articles/7530/Zip-Utils-Clean-Elegant-Simple-Cplusplus-Win
或github下载
https://github.com/veis-lzf/zip_utils_src
备注:
Ziputils 不能处理复杂的zip压缩包
error C4996: ‘strcpy‘: This function or variable may be unsafe.解决方法
https://blog.csdn.net/xuangelouzhu/article/details/112272701
解决error C2760:语法错误: 意外的令牌“标识符”,预期的令牌为“类型说明符”
https://blog.csdn.net/it_xiangqiang/article/details/109715945
fatal error C1083: 无法打开包括文件: “afx.h”: No such file or directory
https://blog.csdn.net/qq_34430371/article/details/110926982
参考连接
https://blog.csdn.net/qq_45662588/article/details/117027726
zlib 编译
https://zhuanlan.zhihu.com/p/426174324
https://zhuanlan.zhihu.com/p/366490674
https://copyfuture.com/blogs-details/20211208082710825q
minizip c++ 压缩文件及文件夹
https://www.yisu.com/zixun/87946.html
https://www.cnblogs.com/xuerongyi/p/12880331.html
https://blog.csdn.net/hallyz945/article/details/117856896
https://blog.csdn.net/m0_66220428/article/details/122463107
https://blog.csdn.net/Alexabc3000/article/details/122821578
linux minizip
https://blog.csdn.net/whahu1989/article/details/80344373
zipper
https://github.com/sebastiandev/zipper
https://blog.csdn.net/u014552102/article/details/112387107
项目配置文件
下载链接中有两个文件夹,分别为解压文件跟压缩文件
将解压文件夹下的代码文件添加至项目
ziputils接口全部使用TCHAR类型参数,所以要将你的解压路径转换成TCHAR类型
//将路径转为TCHAR类型
int iUnicode = MultiByteToWideChar(CP_ACP, 0, ZIPFileName_1.c_str(), ZIPFileName_1.length(), NULL, 0);
WCHAR* pwUnicode = new WCHAR[iUnicode + 2];
if (pwUnicode)
{
ZeroMemory(pwUnicode, iUnicode + 2);
}
MultiByteToWideChar(CP_ACP, 0, ZIPFileName_1.c_str(), ZIPFileName_1.length(), pwUnicode, iUnicode);
pwUnicode[iUnicode] = '\0';
pwUnicode[iUnicode+1] = '\0';
//解压文件
SetCurrentDirectoryA(strdec.c_str());//将进程的工作目录移动到该参数所指的目录下,该目录为winrar.exe的默认文件路径
//解压文件会直接在项目的.vcproj目录下进行
HZIP hz = OpenZip(pwUnicode,NULL);
ZIPENTRY ze;
GetZipItem(hz,-1,&ze);
int numitems = ze.index;
for (int zi = 0; zi < numitems; zi++)
{
ZIPENTRY ze;
GetZipItem(hz, zi, &ze);
UnzipItem(hz, zi,ze.name);
}
CloseZip(hz);
压缩文件成zip
//压缩
HZIP hz;
hz = CreateZip("c:\\test.zip",0);
ZipAdd(hz,"ztest.txt", "c:\\test.txt");
CloseZip(hz);
解压缩zip文件
//解压
HZIP hz;
hz = OpenZip("c:\\test.zip",0);
SetUnzipBaseDir(hz,"c:\\");
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);
}
CloseZip(hz);
参考资料
—
参考文档
(31条消息) C++利用Zip库解压缩文件_° LuK的博客-CSDN博客_c++ 解压zip
https://blog.csdn.net/qq_37771728/article/details/125865717
(31条消息) C++解压zip压缩文件_痕忆丶的博客-CSDN博客_c++ 解压
https://blog.csdn.net/qq_37059136/article/details/83510764
【C++ 压缩&解压缩 开源库】ZIP入门使用总结 - fengMisaka - 博客园 (cnblogs.com)
https://www.cnblogs.com/linuxAndMcu/p/14508503.html#_label2
(31条消息) Zip压缩解压缩之C++实现。_猪猪加大码力的博客-CSDN博客_c++zip库
https://blog.csdn.net/Struggling_Jeff/article/details/100857364
Zstandard(Zstd)新型压缩算法代替Zlib 简单使用教程 - wcctml - 博客园 (cnblogs.com)
https://www.cnblogs.com/wcctml/p/7045686.html
速度快,性能好!压缩神器 zstd - 知乎 (zhihu.com)
https://zhuanlan.zhihu.com/p/353505496
zstd,未来可期的数据压缩算法 - 简书 (jianshu.com)
https://www.jianshu.com/p/71eb3071d3e0
zstd c++ string 压缩&解压 - fattyCoder - 博客园 (cnblogs.com)
https://www.cnblogs.com/fattyCoder/p/14135278.html
(31条消息) Zstandard(Zstd)新型压缩算法代替Zlib 简单使用教程_毕加索罗斯的博客-CSDN博客_zstd
https://blog.csdn.net/u014134886/article/details/78746633
rar和zip有什么区别呢?- 知乎 (zhihu.com)
https://www.zhihu.com/question/376392236