bit7z一個(gè)c++靜態(tài)庫,為7-zip共享庫提供了一個(gè)干凈簡(jiǎn)單的接口
使用CMAKE重新編譯github上的bit7z庫,用來解壓/預(yù)覽iso9660,WIm,Zip,Rar等常用的壓縮文件格式。z-zip庫支持大多數(shù)壓縮文件格式
編譯bit7z(C++版本)
bit7z是一個(gè)跨平臺(tái)的c++靜態(tài)庫,它允許通過一個(gè)干凈簡(jiǎn)單的包裝器接口從7-zip項(xiàng)目壓縮/提取歸檔文件到動(dòng)態(tài)庫。
它支持對(duì)文件系統(tǒng)或內(nèi)存進(jìn)行壓縮和提取、讀取存檔元數(shù)據(jù)、更新現(xiàn)有的存檔元數(shù)據(jù)、創(chuàng)建多卷存檔、操作進(jìn)度回調(diào)以及許多其他功能。
壓縮支持格式:7z, XZ, BZIP2, GZIP, TAR, ZIP, and WIM.
解壓支持格式:7z, AR, ARJ, BZIP2, CAB, CHM, CPIO, CramFS, DEB, DMG, EXT, FAT, GPT, GZIP, HFS, HXS, IHEX, ISO, LZH, LZMA, MBR, MSI, NSIS, NTFS, QCOW2, RAR, RAR5, RPM, SquashFS, TAR, UDF, UEFI, VDI, VHD, VMDK, WIM, XAR, XZ, Z, and ZIP
更多詳細(xì):https://github.com/rikyoz/bit7z
不建議使用此版本調(diào)用7-zip庫;
使用mscv 2017編譯器編譯
從https://github.com/rikyoz/bit7z下載源碼后解壓使用cMake默認(rèn)mscv2017直接可以編譯,選項(xiàng)直接默認(rèn)或者全選就行,然后再點(diǎn)擊 Configure-》generate;
編譯后生成以下目錄
此時(shí)需要返回bit7z-master原目錄添加lamz1900包
下載lamz1900包:https://www.7-zip.org/a/lzma1900.7z
解壓lzma1900,將lzma1900中的文件復(fù)制到bit7z-master包下的third_party/7-zip文件夾中
打開編譯好的bit7z.sln文件修改設(shè)置bit7z為啟動(dòng)項(xiàng),修改屬性頁-》c/C++附件目錄中的庫文件目錄,然后右鍵重新生成,在生成目錄下找到生成好的bit7z.lib文件
通過這種方法生成lib庫,BitCompressor 類變成了一個(gè)模版類,調(diào)用方式參考github的后半段說明,比較繁瑣,源碼中展示的案例也貌似是付費(fèi)內(nèi)容,需要三方庫。
建議直接通過編譯下載Qt版本bit7z庫調(diào)用
參考借鑒文章
C++ 7z解壓縮編譯及使用
c++配置并使用bit7z加密壓縮或解壓7z文件
bit7z庫 :https://github.com/rikyoz/bit7z
下載bit7z(QT版本)
直接下載Qt版本的bit7z庫,能直接重新選擇編譯器生成Bit7z庫
主要是參考這篇文章:
qt5 7zip源碼編譯及使用(含展示進(jìn)度)
解壓后直接可以打開bit7z.pro ,
同時(shí)也需要把lzma1900中的文件放到7zsdk文件夾中,再選擇編譯器編譯就行。
調(diào)用bit7z庫
以Qt版本源碼生成的bit7z庫為例,需要在項(xiàng)目pro文件中添加lib引用和include文件夾引用
///生成的lib庫地址
win32:CONFIG(release, debug|release): LIBS += -L$$DESTDIR/ -lbit7z
else:win32:CONFIG(debug, debug|release): LIBS += -L$$DESTDIR/ -lbit7zd
#include文件目錄所在 包括所有hpp頭文件
INCLUDEPATH += $$PWD/../bit7z
DEPENDPATH += $$PWD/../bit7z
注意調(diào)用時(shí)需要OleAut32.lib和User32.lib這兩個(gè)文件,
# 不加上-lOleAut32 -lUser32這段 bit7z無法解析
LIBS += -L$$DESTDIR -lbit7z -lOleAut32 -lUser32
編譯時(shí)最好在bitformat.hpp文件中添加此宏定義,
//使用此宏定義調(diào)用時(shí)只需要使用 BitFormat::Auto
//不用再判斷文件類型
#define BIT7Z_AUTO_FORMAT
和bit7z.lib文件放在同一目錄下。
參考:
qt5 7zip源碼編譯及使用(含展示進(jìn)度)
https://gitcode.net/mirrors/rikyoz/Bit7z/-/tree/hotfix/v3.1.4
至于需要的7-zip庫:
7z.dll可以通過官網(wǎng):7-Zip -程序下載安裝后獲取。
7za.dll和7zxa.dll可以直接下載:https://www.7-zip.org/a/7z1900-extra.7z解壓獲取
建議7za.dll和7zxa.dll和7z.dll和執(zhí)行程序放同一目錄下
其中:
7z.dll應(yīng)該支持所有功能,而7za.dll應(yīng)該只支持7z文件格式,而7zxa.dll只能提取7z文件
the 7z.dll should support all these features, while 7za.dll should support only the 7z file format and the 7zxa.dll can only extract 7z files. For more information about the 7-zip DLLs, please see this wiki page
編譯出現(xiàn)異??梢詤⒖?/strong>:[筆記] 編譯bit7z踩坑記錄
調(diào)用庫(hotfix/v3.1.4/示例)
解壓文件
#include "bitextractor.hpp"
using namespace bit7z;
try {
Bit7zLibrary lib{ L"7za.dll" };
//啟用宏定義BIT7Z_AUTO_FORMAT后可以直接使用BitFormat::Auto
BitExtractor extractor{ lib, BitFormat::SevenZip };
extractor.extract( L"path/to/archive.7z", L"out/dir/" ); //extracting a simple archive
extractor.extractMatching( L"path/to/arc.7z", L"file.pdf", L"out/dir/" ); //extracting a specific file
//extracting the first file of an archive to a buffer
std::vector< byte_t > buffer;
extractor.extract( L"path/to/archive.7z", buffer );
//extracting an encrypted archive
extractor.setPassword( L"password" );
extractor.extract( L"path/to/another/archive.7z", L"out/dir/" );
} catch ( const BitException& ex ) {
//do something with ex.what()...
}
壓縮文件
#include "bitcompressor.hpp"
using namespace bit7z;
try {
Bit7zLibrary lib{ L"7z.dll" };
//啟用宏定義BIT7Z_AUTO_FORMAT后可以直接使用BitFormat::Auto
BitCompressor compressor{ lib, BitFormat::Zip };
std::vector< std::wstring > files = { L"path/to/file1.jpg", L"path/to/file2.pdf" };
compressor.compress( files, L"output_archive.zip" ); //creating a simple zip archive
//creating a zip archive with a custom directory structure
std::map< std::wstring, std::wstring > files_map = { { L"path/to/file1.jpg", L"alias/path/file1.jpg" },
{ L"path/to/file2.pdf", L"alias/path/file2.pdf" } };
compressor.compress( files_map, L"output_archive2.zip" );
compressor.compressDirectory( L"dir/path/", L"dir_archive.zip" ); //compressing a directory
//creating an encrypted zip archive of two files
compressor.setPassword( L"password" );
compressor.compressFiles( files, L"protected_archive.zip" );
//updating an existing zip archive
compressor.setUpdateMode( true );
compressor.compressFiles( files, L"existing_archive.zip" );
//compressing a single file into a buffer
std::vector< byte_t > buffer;
BitCompressor compressor2{ lib, BitFormat::BZip2 };
compressor2.compressFile( files[0], buffer );
} catch ( const BitException& ex ) {
//do something with ex.what()...
}
查看文件詳細(xì)
可以通過此方法直接預(yù)覽壓縮文件夾內(nèi)容文章來源:http://www.zghlxwxcb.cn/news/detail-664920.html
#include "bitarchiveinfo.hpp"
using namespace bit7z;
try {
Bit7zLibrary lib{ L"7za.dll" };
BitArchiveInfo arc{ lib, L"archive.7z", BitFormat::SevenZip };
//printing archive metadata
wcout << L"Archive properties" << endl;
wcout << L" Items count: " << arc.itemsCount() << endl;
wcout << L" Folders count: " << arc.foldersCount() << endl;
wcout << L" Files count: " << arc.filesCount() << endl;
wcout << L" Size: " << arc.size() << endl;
wcout << L" Packed size: " << arc.packSize() << endl;
wcout << endl;
//printing archive items metadata
wcout << L"Archive items";
auto arc_items = arc.items();
for ( auto& item : arc_items ) {
wcout << endl;
wcout << L" Item index: " << item.index() << endl;
wcout << L" Name: " << item.name() << endl;
wcout << L" Extension: " << item.extension() << endl;
wcout << L" Path: " << item.path() << endl;
wcout << L" IsDir: " << item.isDir() << endl;
wcout << L" Size: " << item.size() << endl;
wcout << L" Packed size: " << item.packSize() << endl;
}
} catch ( const BitException& ex ) {
//do something with ex.what()...
}
調(diào)用庫可執(zhí)行程序示例
Qt調(diào)用Bit7z庫接口調(diào)用7z.dll解壓壓縮常用Zip、ISO9660、Wim、7z等格式的可執(zhí)行程序,非源碼!Qt案例文章來源地址http://www.zghlxwxcb.cn/news/detail-664920.html
到了這里,關(guān)于Qt 編譯使用Bit7z庫接口調(diào)用7z.dll、7-Zip.dll解壓壓縮常用Zip、ISO9660、Wim、Esd、7z等格式文件(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!