c++中7z压缩

1 篇文章 0 订阅

c++代码中利用7z SDK 进行文件、文件夹压缩难点介绍

这里只讲思路和难点,没有具体代码。
我是把7z封装成了dll

思路
在不改变7z SDK中许多头文件的话,最好就按照其源代码中现有的层次逻辑,把源码中C和CPP两个文件夹提出来,在CPP\7zip\UI下建一个dll工程。然后把Client7z\Client7z.cpp文件全部拷贝出来,放到导出函数的cpp中

然后就沿着main函数中代码逻辑进行代码修改。静下心来看的话,会发现并不是很难。

遍历文件夹,查找所有文件,添加到dirItems中

难点
CDirItem 中 成员:Name的设置
不要给文件的绝对路径,这个变量表示解压时文件存放路径。(点到即止,自行体会)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 C++ 解压 7z 字节字符串,你需要使用一个库来解压缩 7z 文件。其一个流行的库是 7zip。 以下是一个简单的示例代码,展示了如何使用 7zip 解压缩 7z 字节字符串: ```c++ #include <iostream> #include <cstring> #include <cstdlib> #include "lzma/C/7z.h" #include "lzma/C/7zFile.h" int main(int argc, char* argv[]) { // 7z 字节字符串 Byte compressedData[] = { /* 你的字节字符串 */ }; size_t compressedSize = sizeof(compressedData); // 初始化 7zip 解压缩器 ISzAlloc alloc = { 0 }; ISzAlloc allocTemp = { 0 }; CFileInStream archiveStream = { 0 }; if (InFile_Open(&archiveStream.file, "dummy_filename", (void*)compressedData) != 0) { std::cerr << "Failed to open input file" << std::endl; return 1; } CLookToRead2 lookStream = { 0 }; lookStream.buf = (Byte*)malloc(kInputBufSize); lookStream.bufSize = kInputBufSize; lookStream.realStream = &archiveStream.s; CDecompressStat stat = { 0 }; CLzmaDec state = { 0 }; LzmaDec_Construct(&state); LzmaDec_Init(&state); // 解压缩 7z 字节字符串 Byte* outBuffer = (Byte*)malloc(kOutputBufSize); size_t outSizeProcessed = 0; SRes res; do { res = LzmaDec_DecodeToBuf(&state, outBuffer, &kOutputBufSize, &lookStream.s, &outSizeProcessed, LZMA_FINISH_ANY, &stat); if (res != SZ_OK && res != SZ_STREAM_END) { std::cerr << "Decompression error" << std::endl; break; } } while (res != SZ_STREAM_END); // 输出解压缩后的数据 std::cout << "Output: " << std::endl; std::cout.write((const char*)outBuffer, outSizeProcessed) << std::endl; // 清理内存 LzmaDec_Free(&state, &alloc); InFile_Close(&archiveStream.file); free(lookStream.buf); free(outBuffer); return 0; } ``` 这段代码使用了 7zip 的 C API。你需要在代码包含相应的头文件和库文件。此外,你需要将 `compressedData` 和 `compressedSize` 替换为你自己的字节字符串和长度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值