一个基于 miniz 的轻量级 ZIP 压缩/解压库
- 支持 ZIP 文件的创建、写入、解压
- 支持递归添加文件夹
- 支持将内存数据作为文件写入 ZIP
- 支持解压到文件或内存
- 跨平台(Windows / Linux / MacOS)
- 异常安全 + RAII 管理
| C++ 标准 | 需求 |
|---|---|
| C++17+ | 无依赖,可直接使用 |
| C++11 / C++14 | 需要 ghc::filesystem |
将 zip_compress 目录加入项目目录,然后通过 add_subdirectory 和 target_link_libraries 即可编译使用。
CMake 示例:
# 主CMakeLists添加子目录
add_subdirectory(zip_compress)
# target CMakeLists 链接 zip_compress 即可
target_link_libraries(<target_name> PRIVATE zip_compress)include包含头文件即可使用
#include "zip_compress/zip_reader.h"
#include "zip_compress/zip_writer.h"C++11 / C++14 下缺失
std::filesystem,需要在主CMakeLists添加
add_subdirectory(path_to_ghc_filesystem)即可使用.
#include "zip_writer.h"
int main() {
zip_compress::ZipWriter zw("output.zip");
zw.add_file("test.txt"); // 添加单个文件
zw.add_folder("assets"); // 添加整个文件夹
zw.add_data("hello.txt", "Hello", 5); // 添加内存数据作为文件
// 析构或手动 finish() 会自动写入并关闭 ZIP
}zip_compress::ZipReader zr("output.zip");
auto files = zr.file_list();
for (auto& f : files) {
std::cout << f << "\n";
}zr.extract_all("out_folder");zr.extract_file("assets/image.png", "out/image.png");auto data = zr.extract_file_to_memory("hello.txt");
std::string s(data.begin(), data.end());| 方法 | 说明 |
|---|---|
add_file(path, base_path) |
添加文件至 ZIP |
add_folder(path) |
递归添加整个文件夹 |
add_data(name, data, size) |
添加内存块作为文件 |
finish() |
手动结束写入(析构自动调用) |
| 方法 | 说明 |
|---|---|
file_list() |
列出 ZIP 内所有路径 |
extract_all(folder) |
解压整个 ZIP |
extract_file(name, output) |
解压单个文件至硬盘 |
extract_file_to_memory(name) |
解压文件到 vector<uint8_t> |
本项目使用 MIT License
欢迎提出 Issue / PR