# bit7z **Repository Path**: ninsunclosear/bit7z ## Basic Information - **Project Name**: bit7z - **Description**: No description available - **Primary Language**: C++ - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-11-06 - **Last Updated**: 2022-12-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

bit7z

A C++ static library offering a clean and simple interface to the 7-zip DLLs

GitHub release MSVC 2012 - 2019 x86, x86_64 Docs Donations Build status License

Supported FeaturesGetting StartedDownloadRequirementsBuildingDonationsLicense

## Introduction **bit7z** is a C++ static library which allows to compress and extract many file archive formats, all through a clean, simple and entirely object-oriented interface to the dynamic libraries from the 7-zip project ().
It supports compression and extraction to and from the filesystem or the memory, reading of archives metadata, updating existing archives, creation of multi-volume archives, operation progress callbacks and many other functionalities. ## Supported Features + **Compression** using the following archive formats: 7z, XZ, BZIP2, GZIP, TAR, ZIP and WIM. + **Extraction** of the following archive formats: 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. + **Reading metadata** of archives and of their content (from v3.x). + **Testing** archives for errors (from v3.x). + **Updating** existing file archives (from v3.1.x). + **Compression and extraction _to and from_ memory** (from v2.x — compression to memory is supported only for BZIP2, GZIP, XZ and TAR formats). + **Compression and extraction _to and from_ C++ standard streams** (from v3.1.x). + Compression using a **custom directory system** in the output archives (from v3.x) + **Selective extraction** of only specified files/folders **using wildcards** (from v3.x) and **regexes** (from v3.1.x). + Creation of **encrypted archives** (strong AES-256 encryption — only for 7z and ZIP formats). + **Archive header encryption** (only for 7z format). + Choice of the **compression level** (from none to ultra, not all supported by every output archive format). + Choice of the **compression method** (from v3.1.x — see the [wiki](https://github.com/rikyoz/bit7z/wiki/Advanced-Usage#compression-methods) for the supported methods). + Choice of the compression **dictionary size** (from v3.1.x). + **Automatic input archive format detection** (from v3.1.x). + **Solid archives** (only for 7z). + **Multi-volume archives** (from v2.1.x). + **Operation callbacks**, through which it is possible to obtain real time information about the ongoing extraction or compression operation (from v2.1.x). Please note that the presence or not of some of the above features depends on the particular .dll used along with bit7z. For example, 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](https://github.com/rikyoz/bit7z/wiki/7z-DLLs). In the end, some other features (e.g. _automatic format detection_ and _selective extraction using regexes_) are disabled by default and macros defines must be used during compilation to have them available ([wiki](https://github.com/rikyoz/bit7z/wiki/Building-the-library)). ## Getting Started (Library Usage) Below are a few examples that show how to use some of the main features of bit7z: ### Extracting files from an archive ```cpp #include "bitextractor.hpp" using namespace bit7z; try { Bit7zLibrary lib{ L"7za.dll" }; 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()... } ``` ### Compressing files into an archive ```cpp #include "bitcompressor.hpp" using namespace bit7z; try { Bit7zLibrary lib{ L"7z.dll" }; 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()... } ``` ### Reading archive metadata ```cpp #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()... } ``` A complete _**API reference**_ is available in the [wiki](https://github.com/rikyoz/bit7z/wiki/) section. ## Download
Github All Releases
Github All Releases
Each released package contains a _precompiled version_ of the library (both in _debug_ and _release_ mode) and the _public API headers_ that are needed to use it in your program; packages are available for both _x86_ and _x64_ architectures. Obviously, you can also clone/download this repository and build the library by yourself (please, see the [wiki](https://github.com/rikyoz/bit7z/wiki/Building-the-library)). ## Requirements + **Target OS:** Windows (both x86 and x64). + **Compiler:** MSVC 2012 or greater (MSVC 2010 supported until v2.x). + **DLLs:** 7-zip DLLs (v19.00 for the GitHub release packages). The 7-zip dlls are not shipped with bit7z but they are available at [7-zip.org](http://www.7-zip.org/). **Note**: in order to use this library you should link your program not only with **bit7z** but also with *oleaut32* and *user32* (e.g. `-lbit7z -loleaut32 -luser32`). **Note 2**: even if compiled with the latest version of 7-zip, **bit7z** _should_ work also with the dlls of previous versions, such as v16.04. However, it is _strongly suggested_ to use dlls with the same version. **Note 3**: the code has been tested with MSVC 2012, 2015, 2017 and 2019. ## Building bit7z A guide on how to build this library is available [here](https://github.com/rikyoz/bit7z/wiki/Building-the-library). ## Donations If you have found this project useful, please consider supporting it with a small donation or buying me a coffee/beer, so that I can keep improving it! Thank you! :)
Buy Me a Coffee at ko-fi.com Donations
## License (GPL v2) ```markdown This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. ```
Copyright © 2014 - 2021 Riccardo Ostani (@rikyoz)