Bit7z Versions Save

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

v4.0.6

2 months ago

Changes from v4.0.5:

  • Fixed creation and access time metadata of extracted files not being restored (partial fix for #184).
  • Fixed error messages when opening file streams on MinGW.
  • Fixed a linking issue with some versions of MinGW (issue #193).
  • Fixed project version in CMakeLists.txt.
  • Fixed BIT7Z_DISABLE_USE_STD_FILESYSTEM not working on old macOS toolchains (issue #194).
  • Allowed to use BitInputArchive's ConstIterator in const variables.

Full Changelog: https://github.com/rikyoz/bit7z/compare/v4.0.5...v4.0.6

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v4.0.5

4 months ago

Changes from v4.0.4:

  • Fixed building using some versions of GCC.
  • Fixed building using GCC on macOS.
  • Fixed a missing nullptr check when extracting to a fixed-size buffer.
  • Fixed the empty name file alias not being used in some edge cases.
  • Added a check for invalid indices in BitInputArchive::extractTo.
  • Avoided the unnecessary creation of a FilesystemItem object in OpenCallback.
  • Added the option BIT7Z_DISABLE_USE_STD_FILESYSTEM, which makes bit7z always use ghc::filesystem instead of std::filesystem.
    • This option allows you to work around any possible bug in compilers' implementation of std::filesystem (e.g., https://github.com/rikyoz/bit7z/issues/181).
    • By default, this option is disabled, and bit7z will always try to use std::filesystem when available (as in previous versions).
  • Fixed the std::copy_n warning in old versions of MSVC.
  • Defined /Zc:__cplusplus only when using MSVC 15.7 and later.
  • Updated examples in the README.

Full Changelog: https://github.com/rikyoz/bit7z/compare/v4.0.4...v4.0.5

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v4.0.4

6 months ago

Changes from v4.0.3:

  • Fixed manually linking bit7z when enabling BIT7Z_AUTO_FORMAT (close issue #173).
  • Improved error messages when opening file streams.
  • Cleaned up unused code and fixed comments.
  • Moved string utility functions to a separate source file.
  • Improved tests.
  • Fixed some static analysis warnings.
  • Fixed some implicit signed/unsigned conversions.
  • Added more compiler warning flags on GCC/Clang.
  • Updated CPM.cmake to 0.38.6.
  • Added a GitHub action for running tests using most bit7z build options combinations.

Full Changelog: https://github.com/rikyoz/bit7z/compare/v4.0.3...v4.0.4

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v4.0.3

7 months ago

Changes from v4.0.2:

  • Fixed bit7z::narrow on Windows (close issue #172).
  • Updated the project version in CMakeLists.txt.
  • Fixed build on GCC 5.
  • Improved the unit tests.
  • Reduced code duplication in unit tests.
  • Fixed some warnings from static analysis tools.
  • Fixed the code formatting.

Full Changelog: https://github.com/rikyoz/bit7z/compare/v4.0.2...v4.0.3

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v4.0.2

7 months ago

Changes from v4.0.1:

  • Fixed build on Android API level 23 and earlier (issue #157).
  • Fixed some warnings from static analysis tools like PVS-Studio and clang-tidy.
  • Fixed missing proper conversions between tstring and fs::path throughout the code.
    • This should also fix some issues with correctly handling UTF-8 characters in strings.
  • Added more tests for when compiling using BIT7Z_USE_SYSTEM_CODEPAGE.
  • Fixed support to using both BIT7Z_USE_NATIVE_STRING and BIT7Z_AUTO_PREFIX_LONG_PATHS.
  • Always use FormatMessageA for error messages on Windows.
  • Fixed and improved bit7z::to_tstring.

Full Changelog: https://github.com/rikyoz/bit7z/compare/v4.0.1...v4.0.2

This is a maintenance release. For a full changelog of the other changes introduced by bit7z v4.0.x, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v4.0.1

7 months ago

Changes from v4.0.0:

  • Fix compression of filesystem items with names having non-ASCII characters
  • Improve the README

Full Changelog: https://github.com/rikyoz/bit7z/compare/v4.0.0...v4.0.1

This is a maintenance release. For a full changelog of bit7z v4.0.x, please check https://github.com/rikyoz/bit7z/releases/tag/v4.0.0.

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v4.0.0

7 months ago

Changes from v4.0.0-rc:

  • Use macro instead of function for HRESULT_FROM_WIN32 (by @michaelKle in https://github.com/rikyoz/bit7z/pull/130).
  • Fixed missing #include <algorithm> in formatdetect.cpp (by @gr3yknigh1 in https://github.com/rikyoz/bit7z/pull/132).
  • Fixed code formatting, code style consistency, and comments.
  • Fixed support to GCC 4.9.
  • Improved unit tests.
  • Added unit tests for BitItemsVector.
  • Added tests for BitArchiveReader.
  • Made the fs namespace internal to the bit7z namespace (fix https://github.com/rikyoz/bit7z/issues/141).
  • Increased the number of open files when creating multi-volume archives (partial fix for issue https://github.com/rikyoz/bit7z/issues/150).
  • Improved error messages.
  • Removed createArchiveObject in Bit7zLibrary.
  • Added a check if the password is ASCII-only when compressing to Zip archives (it can be disabled via the BIT7Z_DISABLE_ZIP_ASCII_PWD_CHECK CMake option).
  • Updated default version of 7-zip to v23.01.
  • Fixed build with MSVC ARM toolchain.
  • Removed third-party git submodules: now bit7z uses CPM.cmake for automatically handling third-party dependencies.
    • By default, bit7z will use 7-zip v23.01, unless you specify a different version via the BIT7Z_7ZIP_VERSION option (e.g., -DBIT7Z_7ZIP_VERSION=22.01).
    • Alternatively, you can specify a custom path containing the 7-zip source code via the option BIT7Z_CUSTOM_7ZIP_PATH.
  • Fixed and improved the handling of UTF-8 paths.
  • Improve format detection.
  • Added option BIT7Z_USE_SYSTEM_CODEPAGE to make bit7z use the system codepage for std::string instead of UTF-8 (highly not recommended).
  • Added functions to check whether an archive is encrypted/header-encrypted (issue https://github.com/rikyoz/bit7z/issues/164).
  • Removed unnecessary conversions from fs::path to tstring and vice versa.
  • Added support for correctly storing symbolic links when creating archives (discussion https://github.com/rikyoz/bit7z/discussions/166).
  • Added support for applying BIT7Z_STRING to macro defines (issue https://github.com/rikyoz/bit7z/issues/167).
  • Added optional sanitization of reserved Windows file names during file extraction (by @Luosiyuan in https://github.com/rikyoz/bit7z/pull/168).
  • Improved the README.
  • Check for the file signature when detecting the format of files w/o an extension.
  • Improved error messages when extracting an encrypted archive w/o a password.
  • Introduced BitFailureSource error condition enum: it can be used for performing queries on bit7z's std::error_codes, for the purpose of grouping, classification, or error translation.

Full Changelog: https://github.com/rikyoz/bit7z/compare/v4.0.0-rc...v4.0.0

Changes from v3.2.x:

Expand for more details!
  • Added support to Linux and macOS (issue #19).
  • Added support to the MinGW compiler.
  • Dropped support to old MSVC 2012 and 2013.
  • The project requires at least a C++14 compiler to build; the public API is still C++11-compatible.
  • Removed QMake and MSBuild project files: now bit7z uses only CMake as its build system.
  • Removed format restriction to memory compression.
  • Renamed BitArchiveInfo to BitArchiveReader.
  • Added support to extracting/testing the input archive of BitArchiveReader.
  • Made BitArchiveReader/BitInputArchive behave like an std container (e.g., added iterators).
  • Added support for canceling ongoing operation in progress callback (issue #37).
  • Added support to set the number of threads used when compressing (issue #38).
  • Added support for extracting without retaining the directory structure (issue #34).
  • Added the possibility to choose the word size to use when compressing.
  • Added the BitArchiveWriter class that allows creating a single new archive or updating an old one with new items.
  • Added the BitArchiveEditor class that allows editing existing archives.
    • Added support for renaming/deleting items inside an archive (issue #43).
  • Added different archive update modes:
    • None: Trying to update and archive will throw a BitException.
    • Append: New items will be appended to the archive (i.e., the old update behavior).
    • Overwrite: New items whose path already exists in the archive will be overwritten, and others will be appended.
  • Changed file callback to make it report the full path of the file (issue #46).
  • Added the possibility to extract a specific file to buffer (issue #32).
  • Fixed and improve the public API.
  • Renamed the BitExtractor class to BitFileExtractor.
    • Now, BitExtractor is just a template class for all the extraction classes.
  • Renamed the BitCompressor class to BitFileCompressor.
    • Now, BitCompressor is just a template class for all the compression classes.
  • Changed the default string type to std::string instead of std::wstring.
    • std::strings are considered UTF-8 encoded: the project will follow the UTF-8 Everywhere Manifesto.
    • This allows using the library in cross-platform projects more quickly.
    • You can still achieve the old behavior by using bit7z with the -DBIT7Z_USE_NATIVE_STRING CMake option. In this case:
      • On Windows, the default string type will be std::wstring (as in bit7z v3);
      • On Linux and macOS, it will remain std::string.
  • Added an initial unit test subproject (can be enabled via the BIT7Z_BUILD_TESTS option).
  • Fixed some edge cases in the wildcard matching function.
  • Added a basic OverwriteMode enum that allows configuring how to deal with when an output file or buffer already exists (issue #116). It works for both compressors and extractors.
    • None: The archive handler will throw an exception.
    • Overwrite: The handler will overwrite the old file or buffer with the new one.
    • Skip: The handler will skip writing to the output file or buffer.
  • Added a getter for the CRC value of a BitArchiveItem.
  • Added option for generating Position Independent Code (issue #117).
  • Allow setting archive format properties as described in the 7-zip docs (close issues #91 and #103).
  • Moved public API headers to the include/bit7z/ folder.
  • Added an option to automatically prepend paths with the long path prefix (issue #45).
  • Added an option to build the Doxygen documentation.
  • Clean up code and fix code formatting.
  • Re-licensed the project under the MPLv2 (issue #86).

Full Changelog: https://github.com/rikyoz/bit7z/compare/v3.2.0...v4.0.0

Binaries built using the default options with Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v4.0.0-rc

1 year ago

Changes from v4.0.0-beta:

  • Fixed BitAbstractArchiveCreator not respecting the retaining directories option.
  • Incremented the minimum CMake version needed to v3.11.
  • Added an initial unit test subproject (can be enabled via the BIT7Z_BUILD_TESTS option).
    • I will make it more complete over time.
  • Fixed BitOutputArchive::addItems not respecting the file indexing options.
  • Fixed issue #112.
  • Fixed typo in guids.cpp and guids.hpp (issue #113).
  • Fixed linking when using some versions of MinGW.
  • Fixed public API support to C++11.
  • Fixed compilation on Windows with native strings enabled.
  • Fixed some edge cases in the wildcard matching function.
  • Added a basic OverwriteMode enum that allows configuring how to deal with when an output file or buffer already exists (issue #116). It works for both compressors and extractors.
    • None: The archive handler will throw an exception.
    • Overwrite: The handler will overwrite the old file or buffer with the new one.
    • Skip: The handler will skip writing to the output file or buffer.
  • Removed the beta's UpdateMode::OverwriteArchive enumerator: the same result can be achieved by setting OverwriteMode::Overwrite.
  • Added a getter for the CRC value of a BitArchiveItem.
  • Added UpdateMode::Update and deprecated UpdateMode::Overwrite.
  • Deprecated BitAbstractArchiveCreator::setUpdateMode(bool).
  • Allow extracting multi-volume archives without writing the full archive (issue #107).
  • Fixed CVolumeOutStream calling the wrong parent class SetSize method.
  • Added option for generating Position Independent Code (issue #117).
  • Allow setting archive format properties as described in the 7-zip docs (close issues #91 and #103).
  • Added posixCode() method to BitException.
  • Added option to link to libc++ on Clang.
  • Moved public API headers to the include/bit7z/ folder.
  • Fixed building on 32-bit architectures.
  • Added an option to automatically prepend paths with the long path prefix (issue #45)
  • Added an option to build the Doxygen documentation.
  • Clean up code and fix code formatting.

Full Changelog: https://github.com/rikyoz/bit7z/compare/a75e335...ac49527


Changes from v3.2.x:

  • Added support to Linux and macOS (issue #19).
  • Added support to the MinGW compiler.
  • Dropped support to old MSVC 2012 and 2013.
  • The project requires at least a C++14 compiler to build; the public API is still C++11-compatible.
  • Removed QMake and MSBuild project files: now bit7z uses only CMake as its build system.
  • Removed format restriction to memory compression.
  • Renamed BitArchiveInfo to BitArchiveReader.
  • Added support to extracting/testing the input archive of BitArchiveReader.
  • Made BitArchiveReader/BitInputArchive behave like an std container (e.g., added iterators).
  • Added support for canceling ongoing operation in progress callback (issue #37).
  • Added support to set the number of threads used when compressing (issue #38).
  • Added support for extracting without retaining the directory structure (issue #34).
  • Added the possibility to choose the word size to use when compressing.
  • Added the BitArchiveWriter class that allows creating a single new archive or updating an old one with new items.
  • Added the BitArchiveEditor class that allows editing existing archives.
    • Added support for renaming/deleting items inside an archive (issue #43).
  • Added different archive update modes:
    • None: Trying to update and archive will throw a BitException.
    • Append: New items will be appended to the archive (i.e., the old update behavior).
    • Overwrite: New items whose path already exists in the archive will be overwritten, and others will be appended.
  • Changed file callback to make it report the full path of the file (issue #46).
  • Added the possibility to extract a specific file to buffer (issue #32).
  • Fixed and improve the public API.
  • Renamed the BitExtractor class to BitFileExtractor.
    • Now, BitExtractor is just a template class for all the extraction classes.
  • Renamed the BitCompressor class to BitFileCompressor.
    • Now, BitCompressor is just a template class for all the compression classes.
  • Changed the default string type to std::string instead of std::wstring.
    • Input strings are considered UTF-8 encoded: the project will follow the UTF-8 Everywhere Manifesto.
    • This allows using the library in cross-platform projects more quickly.
    • You can still achieve the old behavior by using bit7z with the -DBIT7Z_USE_NATIVE_STRING CMake option. In this case:
      • On Windows, the default string type will be std::wstring (as in bit7z v3);
      • On Linux and macOS, it will remain std::string.
  • Re-licensed the project under the MPLv2 (issue #86).

Full Changelog: https://github.com/rikyoz/bit7z/compare/v3.2.0...v4.0.0-rc

Binaries built using Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, 2019, and 2022 👇

v3.2.0

1 year ago

Changes from v3.2.0:

Full Changelog: https://github.com/rikyoz/bit7z/compare/v3.1.5...v3.2.0

Binaries built using MSVC 2015, 2017, and 2019 👇

v4.0.0-beta

1 year ago

Changes from v3.1.x:

  • Added support to Linux and macOS (issue #19).
  • Added support to MinGW compiler.
  • Dropped support to old MSVC 2012 and 2013.
  • Now the project uses the C++14 standard.
  • Removed format restriction to memory compression.
  • Renamed BitArchiveInfo to BitArchiveReader.
  • Added support to extracting/testing the input archive of BitArchiveReader.
  • Made BitArchiveReader/BitInputArchive behave like an std container (e.g., added iterators).
  • Added support for canceling ongoing operation in progress callback (issue #37).
  • Added support to set the number of threads used when compressing (issue #38).
  • Added support for extracting without retaining the directory structure (issue #34).
  • Added the possibility to choose the word size to be used when compressing.
  • Added the BitArchiveWriter class that allows creating a single new archive or updating an old one with new items.
  • Added the BitArchiveEditor class that allows editing existing archives.
    • Added support for renaming/deleting items inside an archive (issue #43).
  • Added different archive update modes:
    • None: Trying to update and archive will throw a BitException.
    • Append: New items will be appended to the archive (i.e., the old update behavior).
    • Overwrite: New items whose path already exists in the archive will be overwritten, and other will be appended.
    • OverwriteArchive: The output archive will be deleted and recreated (unless it is a multi-volume archive, in which case an exception is thrown).
  • Changed file callback to make it report the full path of the file (issue #46).
  • Added the possibility to extract a specific file to buffer (issue #32).
  • Fixed and improve the public API.
  • Renamed the BitExtractor class to BitFileExtractor.
    • Now BitExtractor is just a template class for all the extraction classes.
  • Renamed the BitCompressor class to BitFileCompressor.
    • Now, BitCompressor is just a template class for all the compression classes.
  • Changed the default string type to std::string instead of std::wstring.
    • Input strings are considered UTF-8 encoded: the project will follow the UTF-8 Everywhere Manifesto.
    • This allows using the library in cross-platform projects more quickly.
    • You can still achieve the old behavior by using bit7z with the -DBIT7Z_USE_NATIVE_STRING CMake option. In this case:
      • On Windows, the default string type will be std::wstring (as in bit7z v3);
      • On Linux and macOS, it will remain std::string.
  • Re-licensed the project under the MPLv2 (issue #86).

Full Changelog: https://github.com/rikyoz/bit7z/compare/v3.1.5...v4.0.0-beta

Binaries built using Clang10, GCC 9, MinGW 8, MSVC 2015, 2017, and 2019 👇