bit7z 4.0.9
A C++ library for interfacing with the 7-zip shared libs.
Loading...
Searching...
No Matches
bitarchivereader.hpp
1/*
2 * bit7z - A C++ static library to interface with the 7-zip shared libraries.
3 * Copyright (c) 2014-2023 Riccardo Ostani - All Rights Reserved.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at https://mozilla.org/MPL/2.0/.
8 */
9
10#ifndef BITARCHIVEREADER_HPP
11#define BITARCHIVEREADER_HPP
12
13#include "bitabstractarchiveopener.hpp"
14#include "bitarchiveiteminfo.hpp"
15#include "bitexception.hpp"
16#include "bitinputarchive.hpp"
17
18struct IInArchive;
19struct IOutArchive;
20struct IArchiveExtractCallback;
21
22namespace bit7z {
23
28 public:
45 const tstring& inArchive,
46 ArchiveStartOffset archiveStart,
47 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
48 const tstring& password = {} );
49
64 const tstring& inArchive,
65 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
66 const tstring& password = {} );
67
84 const buffer_t& inArchive,
85 ArchiveStartOffset archiveStart,
86 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
87 const tstring& password = {} );
88
103 const std::vector< byte_t >& inArchive,
104 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
105 const tstring& password = {} );
106
123 std::istream& inArchive,
124 ArchiveStartOffset archiveStart,
125 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
126 const tstring& password = {} );
127
142 std::istream& inArchive,
143 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
144 const tstring& password = {} );
145
146 BitArchiveReader( const BitArchiveReader& ) = delete;
147
149
150 auto operator=( const BitArchiveReader& ) -> BitArchiveReader& = delete;
151
152 auto operator=( BitArchiveReader&& ) -> BitArchiveReader& = delete;
153
159 ~BitArchiveReader() override = default;
160
164 BIT7Z_NODISCARD auto archiveProperties() const -> map< BitProperty, BitPropVariant >;
165
169 BIT7Z_NODISCARD auto items() const -> vector< BitArchiveItemInfo >;
170
174 BIT7Z_NODISCARD auto foldersCount() const -> uint32_t;
175
179 BIT7Z_NODISCARD auto filesCount() const -> uint32_t;
180
184 BIT7Z_NODISCARD auto size() const -> uint64_t;
185
189 BIT7Z_NODISCARD auto packSize() const -> uint64_t;
190
194 BIT7Z_NODISCARD auto hasEncryptedItems() const -> bool;
195
199 BIT7Z_NODISCARD auto isEncrypted() const -> bool;
200
204 BIT7Z_NODISCARD auto volumesCount() const -> uint32_t;
205
209 BIT7Z_NODISCARD auto isMultiVolume() const -> bool;
210
214 BIT7Z_NODISCARD auto isSolid() const -> bool;
215
227 template< typename T >
228 BIT7Z_NODISCARD
229 static auto isHeaderEncrypted( const Bit7zLibrary& lib,
230 T&& inArchive,
231 const BitInFormat& format BIT7Z_DEFAULT_FORMAT ) -> bool {
232 try {
233 const BitArchiveReader reader{ lib, std::forward< T >( inArchive ), format };
234 return false;
235 } catch ( const BitException& ex ) {
236 return isOpenEncryptedError( ex.code() );
237 }
238 }
239
256 template< typename T >
257 BIT7Z_NODISCARD
258 static auto isEncrypted( const Bit7zLibrary& lib,
259 T&& inArchive,
260 const BitInFormat& format BIT7Z_DEFAULT_FORMAT ) -> bool {
261 try {
262 const BitArchiveReader reader{ lib, std::forward< T >( inArchive ), format };
263 return reader.isEncrypted();
264 } catch ( const BitException& ex ) {
265 return isOpenEncryptedError( ex.code() );
266 }
267 }
268
269 private:
270 static auto isOpenEncryptedError( std::error_code error ) -> bool;
271};
272
273BIT7Z_DEPRECATED_TYPEDEF( BitArchiveInfo, BitArchiveReader, "Since v4.0; please use BitArchiveReader." );
274
275} // namespace bit7z
276
277#endif // BITARCHIVEREADER_HPP
The Bit7zLibrary class allows accessing the basic functionalities provided by the 7z DLLs.
Definition bit7zlibrary.hpp:56
auto password() const -> tstring
The BitAbstractArchiveOpener abstract class represents a generic archive opener.
Definition bitabstractarchiveopener.hpp:26
auto format() const noexcept -> const BitInFormat &override
The BitArchiveItemInfo class represents an archived item and that stores all its properties for later...
Definition bitarchiveiteminfo.hpp:25
The BitArchiveReader class allows reading metadata of archives, as well as extracting them.
Definition bitarchivereader.hpp:27
BitArchiveReader(const Bit7zLibrary &lib, std::istream &inArchive, ArchiveStartOffset archiveStart, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the archive from the standard input stream.
auto items() const -> vector< BitArchiveItemInfo >
static auto isHeaderEncrypted(const Bit7zLibrary &lib, T &&inArchive, const BitInFormat &format=BitFormat::Auto) -> bool
Checks if the given archive is header-encrypted or not.
Definition bitarchivereader.hpp:229
BitArchiveReader(const Bit7zLibrary &lib, const tstring &inArchive, ArchiveStartOffset archiveStart, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the input file archive.
auto isMultiVolume() const -> bool
auto foldersCount() const -> uint32_t
auto isEncrypted() const -> bool
auto volumesCount() const -> uint32_t
BitArchiveReader(const Bit7zLibrary &lib, const buffer_t &inArchive, ArchiveStartOffset archiveStart, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the archive in the input buffer.
~BitArchiveReader() override=default
BitArchiveReader destructor.
auto size() const -> uint64_t
BitArchiveReader(const Bit7zLibrary &lib, const tstring &inArchive, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the input file archive.
auto hasEncryptedItems() const -> bool
auto packSize() const -> uint64_t
auto isSolid() const -> bool
BitArchiveReader(const Bit7zLibrary &lib, const std::vector< byte_t > &inArchive, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the archive in the input buffer.
static auto isEncrypted(const Bit7zLibrary &lib, T &&inArchive, const BitInFormat &format=BitFormat::Auto) -> bool
Checks if the given archive contains only encrypted items.
Definition bitarchivereader.hpp:258
BitArchiveReader(const Bit7zLibrary &lib, std::istream &inArchive, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the archive from the standard input stream.
auto filesCount() const -> uint32_t
auto archiveProperties() const -> map< BitProperty, BitPropVariant >
The BitException class represents a generic exception thrown from the bit7z classes.
Definition bitexception.hpp:32
The BitInFormat class specifies an extractable archive format.
Definition bitformat.hpp:58
The BitInputArchive class, given a handler object, allows reading/extracting the content of archives.
Definition bitinputarchive.hpp:40
The main namespace of the bit7z library.
Definition bit7zlibrary.hpp:30
ArchiveStartOffset
Offset from where the archive starts within the input file.
Definition bitinputarchive.hpp:31
BitProperty
The BitProperty enum represents the archive/item properties that 7-zip can read or write.
Definition bitpropvariant.hpp:30
The BitPropVariant struct is a light extension to the WinAPI PROPVARIANT struct providing useful gett...
Definition bitpropvariant.hpp:150