项目简介
本项目是一个跨平台的C++静态库,为7 - zip动态库提供了简洁的封装接口。利用该库,开发者能够在文件系统和内存间进行压缩与解压缩操作,还可读取存档元数据、更新现有存档、创建多卷存档以及设置操作进度回调等。
项目的主要特性和功能
特性
- 跨平台支持:支持Windows、Linux、macOS和Android系统。
- 多架构支持:涵盖x86、x86_64、arm、arm64架构。
- 多编译器支持:可使用MSVC 2015及以上、MinGW v6.4及以上、GCC v4.9及以上、Clang 3.6及以上编译器。
功能
- 压缩功能:支持7z、XZ、BZIP2、GZIP、TAR、ZIP和WIM等多种格式。
- 解压缩功能:能处理7z、AR、ARJ、BZIP2等众多存档格式。
- 其他功能:可读取存档及其内容的元数据、测试存档错误、更新现有存档、重命名或删除存档内旧项、在内存和标准流中进行压缩与解压缩、使用自定义路径别名压缩、选择性提取文件、创建加密存档、选择压缩级别和方法等。
安装使用步骤
安装
假设用户已下载本项目的源码文件,可按以下步骤构建库:
bash
cd <bit7z folder>
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
cmake --build . -j --config Release
也可通过CMake将库直接集成到项目中:
1. 下载bit7z并复制到项目子目录(如third_party
),或作为git子模块添加到仓库。
2. 在CMakeLists.txt
中使用add_subdirectory()
命令包含bit7z。
3. 使用target_link_libraries()
命令链接bit7z
库。
示例:
cmake
add_subdirectory( ${CMAKE_SOURCE_DIR}/third_party/bit7z )
target_link_libraries( ${YOUR_TARGET} PRIVATE bit7z )
使用
从存档中提取文件
```cpp
include
try { using namespace bit7z;
Bit7zLibrary lib{ "7za.dll" };
BitFileExtractor extractor{ lib, BitFormat::SevenZip };
extractor.extract( "path/to/archive.7z", "out/dir/" );
extractor.extractMatching( "path/to/archive.7z", "file.pdf", "out/dir/" );
std::vector< byte_t > buffer;
extractor.extract( "path/to/archive.7z", buffer );
extractor.setPassword( "password" );
extractor.extract( "path/to/another/archive.7z", "out/dir/" );
} catch ( const bit7z::BitException& ex ) { / 处理异常 / } ```
将文件压缩到存档
```cpp
include
try { using namespace bit7z;
Bit7zLibrary lib{ "7z.dll" };
BitFileCompressor compressor{ lib, BitFormat::Zip };
std::vector< std::string > files = { "path/to/file1.jpg", "path/to/file2.pdf" };
compressor.compress( files, "output_archive.zip" );
std::map< std::string, std::string > files_map = {
{ "path/to/file1.jpg", "alias/path/file1.jpg" },
{ "path/to/file2.pdf", "alias/path/file2.pdf" }
};
compressor.compress( files_map, "output_archive2.zip" );
compressor.compressDirectory( "dir/path/", "dir_archive.zip" );
compressor.setPassword( "password" );
compressor.compressFiles( files, "protected_archive.zip" );
compressor.setUpdateMode( UpdateMode::Append );
compressor.compressFiles( files, "existing_archive.zip" );
std::vector< bit7z::byte_t > buffer;
BitFileCompressor compressor2{ lib, BitFormat::BZip2 };
compressor2.compressFile( files[0], buffer );
} catch ( const bit7z::BitException& ex ) { / 处理异常 / } ```
读取存档元数据
```cpp
include
try { using namespace bit7z;
Bit7zLibrary lib{ "7za.dll" };
BitArchiveReader arc{ lib, "archive.7z", BitFormat::SevenZip };
std::cout << "Archive properties\n";
std::cout << " Items count: " << arc.itemsCount() << '\n';
std::cout << " Folders count: " << arc.foldersCount() << '\n';
std::cout << " Files count: " << arc.filesCount() << '\n';
std::cout << " Size: " << arc.size() <<'\n';
std::cout << " Packed size: " << arc.packSize() << "\n\n";
std::cout << "Archived items";
for ( const auto& item : arc ) {
std::cout << '\n';
std::cout << " Item index: " << item.index() << '\n';
std::cout << " Name: " << item.name() << '\n';
std::cout << " Extension: " << item.extension() << '\n';
std::cout << " Path: " << item.path() << '\n';
std::cout << " IsDir: " << item.isDir() << '\n';
std::cout << " Size: " << item.size() << '\n';
std::cout << " Packed size: " << item.packSize() << '\n';
std::cout << " CRC: " << std::hex << item.crc() << std::dec << '\n';
}
std::cout.flush();
} catch ( const bit7z::BitException& ex ) { / 处理异常 / } ```
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】