1 //
2 // ZipArchive.h
3 //
4 // Library: Zip
5 // Package: Zip
6 // Module: ZipArchive
7 //
8 // Definition of the ZipArchive class.
9 //
10 // Copyright (c) 2007, Applied Informatics Software Engineering GmbH.
11 // and Contributors.
12 //
13 // SPDX-License-Identifier: BSL-1.0
14 //
15
16
17 #ifndef Zip_ZipArchive_INCLUDED
18 #define Zip_ZipArchive_INCLUDED
19
20
21 #include "Poco/Zip/Zip.h"
22 #include "Poco/Zip/ZipLocalFileHeader.h"
23 #include "Poco/Zip/ZipFileInfo.h"
24 #include "Poco/Zip/ZipArchiveInfo.h"
25 #include <istream>
26 #include <map>
27
28
29 namespace Poco {
30 namespace Zip {
31
32
33 class ParseCallback;
34 class Compress;
35
36
37 class Zip_API ZipArchive
38 /// A ZipArchive contains information on the content of a zip file
39 {
40 public:
41 using FileHeaders = std::map<std::string, ZipLocalFileHeader>;
42 using FileInfos = std::map<std::string, ZipFileInfo>;
43 using DirectoryInfos = std::map<Poco::UInt16, ZipArchiveInfo>;
44 using DirectoryInfos64 = std::map<Poco::UInt32, ZipArchiveInfo64>;
45
46 ZipArchive(std::istream& in);
47 /// Creates the ZipArchive from a file. Note that the in stream will be in state failed after the constructor is finished
48
49 ZipArchive(std::istream& in, ParseCallback& callback);
50 /// Creates the ZipArchive from a file or network stream. Note that the in stream will be in state failed after the constructor is finished
51
52 ~ZipArchive();
53 /// Destroys the ZipArchive.
54
55 FileInfos::const_iterator fileInfoBegin() const;
56
57 FileInfos::const_iterator fileInfoEnd() const;
58
59 FileHeaders::const_iterator findHeader(const std::string& fileName) const;
60
61 FileHeaders::const_iterator headerBegin() const;
62
63 FileHeaders::const_iterator headerEnd() const;
64
65 const std::string& getZipComment() const;
66
67 private:
68 void parse(std::istream& in, ParseCallback& pc);
69
70 ZipArchive(const FileHeaders& entries, const FileInfos& infos, const DirectoryInfos& dirs, const DirectoryInfos64& dirs64 );
71
72 private:
73 FileHeaders _entries;
74 /// Info generated by parsing the data block of the zip file
75 FileInfos _infos;
76 /// Info generated by parsing the directory block of the zip file
77 DirectoryInfos _disks;
78 /// Stores directory info for all found disks
79 DirectoryInfos64 _disks64;
80 /// Stores directory info for all found disks
81
82 static const std::string EMPTY_COMMENT;
83
84 friend class Compress;
85 };
86
87
fileInfoBegin()88 inline ZipArchive::FileInfos::const_iterator ZipArchive::fileInfoBegin() const
89 {
90 return _infos.begin();
91 }
92
93
fileInfoEnd()94 inline ZipArchive::FileInfos::const_iterator ZipArchive::fileInfoEnd() const
95 {
96 return _infos.end();
97 }
98
99
findHeader(const std::string & fileName)100 inline ZipArchive::FileHeaders::const_iterator ZipArchive::findHeader(const std::string& fileName) const
101 {
102 return _entries.find(fileName);
103 }
104
105
headerBegin()106 inline ZipArchive::FileHeaders::const_iterator ZipArchive::headerBegin() const
107 {
108 return _entries.begin();
109 }
110
111
headerEnd()112 inline ZipArchive::FileHeaders::const_iterator ZipArchive::headerEnd() const
113 {
114 return _entries.end();
115 }
116
117
118 } } // namespace Poco::Zip
119
120
121 #endif // Zip_ZipArchive_INCLUDED
122