[笔记] 编译bit7z踩坑记录

简介: [笔记] 编译bit7z踩坑记录

前言

最近在使用解压各种格式文件,做进一步内容检测,发现docx是zip格式,doc是ole格式,zip格式可以用zlib库解压,ole却不行,发现7z可以解压,于是便有了一系列的操作。

步骤

bit7z 是一个开源项目,在7z的基础上做了一层封装,依赖7z的库,所以编译使用过程需要加入7z的DLL,和头文件等。

简单编译bit7z描述整个过程:

  1. 拉去bit7z代码
  2. 下载7z sdk
  3. 7z sdk解压放到到bit7z项目的third_part目录7-Zip
  4. 7z sdk解压再放到bit7z项目的include目录
  5. 下载7z sdk extra补充包 解压其中7za.dll 或者 7z.dll(根据自己的需求确认)
  6. 按照官网文档使用cmake构建和编译:
cd <bit7z folder>
mkdir build && cd build
cmake ../ -DCMAKE_BUILD_TYPE=Release
cmake --build . -j --config Release

注意:

7za.dll 只支持7z格式的解压和压缩

7z.dll 支持大多数格式的解压和压缩。

解压测试

注意:BitFormat::Auto 选项需要编译bit7z时,添加 BIT7Z_AUTO_FORMAT

// This is an open source non-commercial project. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
/*
 * bit7z - A C++ static library to interface with the 7-zip shared libraries.
 * Copyright (c) 2014-2022 Riccardo Ostani - All Rights Reserved.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
 */
 //#define BIT7Z_USE_NATIVE_STRING
#define BIT7Z_AUTO_FORMAT
#include <bitexception.hpp>
//#include <bitarchiveinfo.hpp>
#include <bit7zlibrary.hpp>
#include <bitarchivereader.hpp>
#include <bitfileextractor.hpp>
#include <iostream>
//#pragma comment(lib, "D:\\workspace\\github\\bit7z\\lib\\x64\\Release\\bit7z64.lib")
using namespace std;
using namespace bit7z;
int main(int argc, char* argv[]) {
    try { // bit7z classes can throw BitException objects
        using namespace bit7z;
        Bit7zLibrary lib{ "D:\\workspace\\github\\bit7z\\bin\\x64\\Debug\\7z.dll" };
        BitFileExtractor extractor{ lib, BitFormat::Auto };
        // Extracting a simple archive
        extractor.extract("D:\\test_office.doc", "D:\\test_office\\");
        // Extracting a specific file
        //extractor.extractMatching("path/to/archive.7z", "file.pdf", "out/dir/");
        // Extracting the first file of an archive to a buffer
        //std::vector< byte_t > buffer;
        //extractor.extract("path/to/archive.7z", buffer);
        // Extracting an encrypted archive
        //extractor.setPassword("password");
        //extractor.extract("path/to/another/archive.7z", "out/dir/");
    }
    catch (const bit7z::BitException& ex) {
        printf(ex.what());
    }
    return 0;
}

总结

主要参考这个文章的:!!!C++ 7z解压缩编译及使用!!!

参考:

7z源码的编译与使用_markdown 格式

7z文件格式及其源码的分析(二)

笔记:7-zip在Visual Studio 2019下的编译

c++配置并使用bit7z加密压缩或解压7z文件


相关文章
|
存储 编解码 安全
冥王峡谷安装steamos踩坑记录
记录冥王峡谷安装第三方steamos-holoiso时遇到的一些问题,其它玩家可参考
2448 0
|
4月前
|
Python
Python实用记录(十一):出现科学计数法如何在代码中恢复
本文介绍了如何在Python中处理科学计数法,包括如何将科学计数法转换为普通数字,以及如何设置NumPy的print选项来避免科学计数法的显示。
93 1
|
8月前
|
Java
杭电 OJ 1010-1019 Java解法(未更新完毕)
杭电 OJ 1010-1019 Java解法(未更新完毕)
36 1
|
9月前
|
算法
刷题专栏(十八):第一个错误的版本
刷题专栏(十八):第一个错误的版本
60 0
“字节”再次起跳!内部651页剖析HotSpot 源码手册,GitHub开源
阿嘴记得2年前开始研究Java虚拟机时,查遍了网上所有的资料,凡是能遇到一点好的关于Java虚拟机的资料,我都会认真读、一遍读不懂没关系,阿嘴都会搬到自己的日志中记录下来,后面就是对这些日志进行分类整理,然后加上我的理解后不断加工,最后内化成自己的东西。现在市面上系统介绍Java虚拟机的书籍非常少,细致全面的书籍更是市场空白,所以我把我这几年的所学写成了这本“深入剖析Java虚拟机源码剖析与实例详解(基础卷)”,本书以通俗易懂的语言详细介绍Java虚拟机HotSpot的源码实现,可以帮助读者系统掌握类的生命周期和垃圾回收等基本组件的相关知识。对于想全面了解HotSpot虚拟机工作原理和源码实现
|
存储 算法 Java
算法宝典1——Java版本(此系列持续更新,这篇文章有20道)(有题目的跳转链接)(此份宝典包含了链表、栈、队列、二叉树的算法题)(下)
算法宝典1——Java版本(此系列持续更新,这篇文章有20道)(有题目的跳转链接)(此份宝典包含了链表、栈、队列、二叉树的算法题)(下)
|
机器学习/深度学习 算法 Java
算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)
算法宝典2——Java版本(此系列持续更新,这篇文章目前3道)(有题目的跳转链接)(此份宝典包含了二叉树的算法题)
vc入门宝典十二(调用其它程序)
vc入门宝典十二(调用其它程序)
|
安全 Windows
一招教你判断Windows系统的版本 32Bit or 64Bit
一招教你判断Windows系统的版本 32Bit or 64Bit
562 0
|
设计模式 缓存 Java
面试题 | 怎么写一个又好又快的日志库?(一)(下)
面试题 | 怎么写一个又好又快的日志库?(一)
142 0