bit7z 4.1.0
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) 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 "bit7zlibrary.hpp"
14#include "bitabstractarchiveopener.hpp"
15#include "bitarchiveiteminfo.hpp"
16#include "bitdefines.hpp"
17#include "bitexception.hpp"
18#include "bitformat.hpp"
19#include "bitinputarchive.hpp"
20#include "bitpropvariant.hpp"
21#include "bittypes.hpp"
22
23#include <cstdint>
24#include <istream>
25#include <map>
26#include <system_error>
27#include <vector>
28
29struct IInArchive;
30struct IOutArchive;
31struct IArchiveExtractCallback;
32
33namespace bit7z {
34
38class BitArchiveReader final : public BitAbstractArchiveOpener, public BitInputArchive {
39 public:
56 const Bit7zLibrary& lib,
57 const tstring& inArchive,
58 ArchiveStartOffset archiveStart,
59 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
60 const tstring& password = {}
61 );
62
77 const Bit7zLibrary& lib,
78 const tstring& inArchive,
79 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
80 const tstring& password = {}
81 );
82
99 const Bit7zLibrary& lib,
100 const buffer_t& inArchive,
101 ArchiveStartOffset archiveStart,
102 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
103 const tstring& password = {}
104 );
105
113 const Bit7zLibrary& lib,
114 buffer_t&& inArchive,
115 ArchiveStartOffset archiveStart,
116 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
117 const tstring& password = {}
118 ) = delete;
119
134 const Bit7zLibrary& lib,
135 const buffer_t& inArchive,
136 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
137 const tstring& password = {}
138 );
139
147 const Bit7zLibrary& lib,
148 buffer_t&& inArchive,
149 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
150 const tstring& password = {}
151 ) = delete;
152
169 const Bit7zLibrary& lib,
170 std::istream& inArchive,
171 ArchiveStartOffset archiveStart,
172 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
173 const tstring& password = {}
174 );
175
190 const Bit7zLibrary& lib,
191 std::istream& inArchive,
192 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
193 const tstring& password = {}
194 );
195
209 const Bit7zLibrary& lib,
210 const BitInputArchive& inArchive,
211 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
212 const tstring& password = {}
213 );
214
230 const Bit7zLibrary& lib,
231 const BitInputArchive& inArchive,
232 ArchiveStartOffset archiveStart,
233 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
234 const tstring& password = {}
235 );
236
249 const Bit7zLibrary& lib,
250 const BitInputArchive& inArchive,
251 std::uint32_t subfileIndex,
252 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
253 const tstring& password = {}
254 );
255
270 const Bit7zLibrary& lib,
271 const BitInputArchive& inArchive,
272 std::uint32_t subfileIndex,
273 ArchiveStartOffset archiveStart,
274 const BitInFormat& format BIT7Z_DEFAULT_FORMAT,
275 const tstring& password = {}
276 );
277
278 BitArchiveReader( const BitArchiveReader& ) = delete;
279
281
282 auto operator=( const BitArchiveReader& ) -> BitArchiveReader& = delete;
283
284 auto operator=( BitArchiveReader&& ) -> BitArchiveReader& = delete;
285
291 ~BitArchiveReader() override = default;
292
296 BIT7Z_NODISCARD auto archiveProperties() const -> std::map< BitProperty, BitPropVariant >;
297
301 BIT7Z_NODISCARD auto items() const -> std::vector< BitArchiveItemInfo >;
302
310 BIT7Z_NODISCARD auto itemsMatching( const tstring& pattern ) const -> std::vector< BitArchiveItemInfo >;
311
315 BIT7Z_NODISCARD auto foldersCount() const -> std::uint32_t;
316
320 BIT7Z_NODISCARD auto filesCount() const -> std::uint32_t;
321
325 BIT7Z_NODISCARD auto size() const -> std::uint64_t;
326
330 BIT7Z_NODISCARD auto packSize() const -> std::uint64_t;
331
335 BIT7Z_NODISCARD auto hasEncryptedItems() const -> bool;
336
340 BIT7Z_NODISCARD auto isEncrypted() const -> bool;
341
345 BIT7Z_NODISCARD auto volumesCount() const -> std::uint32_t;
346
350 BIT7Z_NODISCARD auto isMultiVolume() const -> bool;
351
355 BIT7Z_NODISCARD auto isSolid() const -> bool;
356
368 template< typename T >
369 BIT7Z_NODISCARD
370 static auto isHeaderEncrypted(
371 const Bit7zLibrary& lib,
372 T&& inArchive,
373 const BitInFormat& format BIT7Z_DEFAULT_FORMAT
374 ) noexcept -> bool {
375 try {
376 const BitArchiveReader reader{ lib, std::forward< T >( inArchive ), format };
377 return false;
378 } catch ( const BitException& exception ) {
379 return isOpenEncryptedError( exception.code() );
380 }
381 }
382
399 template< typename T >
400 BIT7Z_NODISCARD
401 static auto isEncrypted(
402 const Bit7zLibrary& lib,
403 T&& inArchive,
404 const BitInFormat& format BIT7Z_DEFAULT_FORMAT
405 ) noexcept -> bool {
406 try {
407 const BitArchiveReader reader{ lib, std::forward< T >( inArchive ), format };
408 return reader.isEncrypted();
409 } catch ( const BitException& exception ) {
410 return isOpenEncryptedError( exception.code() );
411 }
412 }
413
414 private:
415 static auto isOpenEncryptedError( std::error_code error ) noexcept -> bool;
416};
417
418BIT7Z_DEPRECATED_TYPEDEF( BitArchiveInfo, BitArchiveReader, "Since v4.0. Please use BitArchiveReader." );
419
420} // namespace bit7z
421
422#endif // BITARCHIVEREADER_HPP
The Bit7zLibrary class allows accessing the basic functionalities provided by the 7z DLLs.
Definition bit7zlibrary.hpp:55
auto password() const -> const tstring &
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:26
The BitArchiveReader class allows reading metadata of archives, as well as extracting them.
Definition bitarchivereader.hpp:38
BitArchiveReader(const Bit7zLibrary &lib, const buffer_t &inArchive, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the archive in the input buffer.
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 packSize() const -> std::uint64_t
auto filesCount() const -> std::uint32_t
auto volumesCount() const -> std::uint32_t
auto itemsMatching(const tstring &pattern) const -> std::vector< BitArchiveItemInfo >
Gets the items whose paths match the given wildcard pattern.
BitArchiveReader(const Bit7zLibrary &lib, const BitInputArchive &inArchive, std::uint32_t subfileIndex, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the subfile at the specified index of the given archive...
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 isEncrypted() const -> bool
auto foldersCount() const -> std::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(const Bit7zLibrary &lib, const BitInputArchive &inArchive, ArchiveStartOffset archiveStart, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the main subfile of the given archive.
BitArchiveReader(const Bit7zLibrary &lib, buffer_t &&inArchive, ArchiveStartOffset archiveStart, const BitInFormat &format=BitFormat::Auto, const tstring &password={})=delete
Deleted overload preventing the use of a temporary input buffer.
auto archiveProperties() const -> std::map< BitProperty, BitPropVariant >
auto items() const -> std::vector< BitArchiveItemInfo >
~BitArchiveReader() override=default
BitArchiveReader destructor.
BitArchiveReader(const Bit7zLibrary &lib, buffer_t &&inArchive, const BitInFormat &format=BitFormat::Auto, const tstring &password={})=delete
Deleted overload preventing the use of a temporary input buffer.
BitArchiveReader(const Bit7zLibrary &lib, const BitInputArchive &inArchive, std::uint32_t subfileIndex, ArchiveStartOffset archiveStart, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the subfile at the specified index of the given archive...
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 isSolid() const -> bool
static auto isEncrypted(const Bit7zLibrary &lib, T &&inArchive, const BitInFormat &format=BitFormat::Auto) noexcept -> bool
Checks if the given archive contains only encrypted items.
Definition bitarchivereader.hpp:401
auto size() const -> std::uint64_t
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.
static auto isHeaderEncrypted(const Bit7zLibrary &lib, T &&inArchive, const BitInFormat &format=BitFormat::Auto) noexcept -> bool
Checks if the given archive is header-encrypted or not.
Definition bitarchivereader.hpp:370
BitArchiveReader(const Bit7zLibrary &lib, const BitInputArchive &inArchive, const BitInFormat &format=BitFormat::Auto, const tstring &password={})
Constructs a BitArchiveReader object, opening the main subfile of the given archive.
The BitException class represents a generic exception thrown from the bit7z classes.
Definition bitexception.hpp:54
The BitInFormat class specifies an extractable archive format.
Definition bitformat.hpp:68
BitInputArchive(const BitAbstractArchiveHandler &handler, const tstring &inFile, ArchiveStartOffset startOffset=ArchiveStartOffset::None)
Constructs a BitInputArchive object, opening the input file archive.
T forward(T... args)
The main namespace of the bit7z library.
Definition bit7zlibrary.hpp:29
ArchiveStartOffset
Offset from where the archive starts within the input file.
Definition bitinputarchive.hpp:46
BitProperty
The BitProperty enum represents the archive/item properties that 7-zip can read or write.
Definition bitpropvariant.hpp:32
std::basic_string< tchar > tstring
Definition bittypes.hpp:104
The BitPropVariant struct is a light extension to the WinAPI PROPVARIANT struct providing useful gett...
Definition bitpropvariant.hpp:161