#壓縮# C++壓縮與解壓常見方案
共 5899字,需瀏覽 12分鐘
·
2024-11-29 22:24
“ 文章所涉及內(nèi)容更多來自網(wǎng)絡(luò),在此聲明,并感謝知識的貢獻(xiàn)者!”
壓縮的格式
—
壓縮的格式
RAR和ZIP是兩種不同的壓縮格式,它們使用是不同的壓縮算法。zip是公開免費的,rar是私有的,申請了專利,一般情況下,rar的壓縮率更高,即同文件以.rar格式壓縮出來的要比.zip小。
除此之外,還有兼容性問題,能壓縮和解壓.rar格式的軟件也可壓縮和解壓.zip文件,反之不行。
zstd
—
Zstd 簡介
Zstandard(縮寫為Zstd)是由Facebook的Yann Collet開發(fā)的一個無損數(shù)據(jù)壓縮算法。Zstandard在設(shè)計上與DEFLATE(.zip、gzip)算法有著差不多的壓縮比,但有更高的壓縮和解壓縮速度。生成和解碼 .zst 格式。
Zstd 環(huán)境配置
在項目中包含頭文件#include "zstd/zstd.h"
//#pragma comment(lib,"libzstd.lib");
在項目exe目錄下面加入libzstd.dll文件
在項目lib文件夾(或者其他什么文件夾)加入libzstd.lib
Zstd 常見接口
- 使用ZSTD_compressBound獲取最大壓縮緩沖區(qū)大小,然后申請緩沖區(qū);
- 使用ZSTD_compress進(jìn)行壓縮
- 可以使用ZSTD_getDecompressedSize來獲取壓縮后最大緩沖區(qū)大小;來申請解壓緩沖區(qū);
解壓的方案
—
解壓的方案
基于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的神級用法總和,實現(xiàn)用C++操作系統(tǒng)
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庫的文件解壓縮
環(huán)境配置
Ziputils官網(wǎng)下載文件:
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 不能處理復(fù)雜的zip壓縮包
error C4996: ‘strcpy‘: This function or variable may be unsafe.解決方法
https://blog.csdn.net/xuangelouzhu/article/details/112272701
解決error C2760:語法錯誤: 意外的令牌“標(biāo)識符”,預(yù)期的令牌為“類型說明符”
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類型參數(shù),所以要將你的解壓路徑轉(zhuǎn)換成TCHAR類型
//將路徑轉(zhuǎn)為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());//將進(jìn)程的工作目錄移動到該參數(shù)所指的目錄下,該目錄為winrar.exe的默認(rèn)文件路徑
//解壓文件會直接在項目的.vcproj目錄下進(jìn)行
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入門使用總結(jié) - fengMisaka - 博客園 (cnblogs.com)
https://www.cnblogs.com/linuxAndMcu/p/14508503.html#_label2
(31條消息) Zip壓縮解壓縮之C++實現(xiàn)。_豬豬加大碼力的博客-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,未來可期的數(shù)據(jù)壓縮算法 - 簡書 (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有什么區(qū)別呢?- 知乎 (zhihu.com)
https://www.zhihu.com/question/376392236
