CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
zip_entry.h
1// NOTICE: AUTOPORTED from foundation/src/zip/ZipEntry.cs with some stylistic fixes
2
3#ifndef _aspose_zip_zip_entry_h_
4#define _aspose_zip_zip_entry_h_
5
6#include <system/text/encoding.h>
7#include <system/string.h>
8#include <system/shared_ptr.h>
9#include <system/object.h>
10#include <system/nullable.h>
11#include <system/io/stream.h>
12#include <system/io/file_attributes.h>
13#include <system/enum_helpers.h>
14#include <system/date_time.h>
15#include <system/text/regularexpressions/regex.h>
16
17#include "zip/events.h"
18#include "zip/zip_error_action.h"
19#include "zip/zip_entry_timestamp.h"
20#include "zip/zip_entry_source.h"
21#include "zip/extract_existing_file_action.h"
22#include "zip/encryption_algorithm.h"
23
24namespace Aspose { namespace Zip {
25
26class CrcCalculatorStream;
27class ZipErrorEventArgs;
28class ZipFile;
29class ZipCrypto;
30
33
34class ASPOSECPP_SHARED_CLASS ZipEntry : public System::Object
35{
36 ASPOSECPP_SHARED_RTTI_INFO_DECL();
37
38 friend class ZipErrorEventArgs;
39 friend class ZipFile;
40 friend class ZipCrypto;
41
42public:
43
44 ASPOSECPP_SHARED_API ZipEntry();
45
46 ASPOSECPP_SHARED_API System::DateTime get_LastModified() const;
47 ASPOSECPP_SHARED_API void set_LastModified(const System::DateTime& value);
48
49 ASPOSECPP_SHARED_API System::DateTime get_ModifiedTime() const;
50 ASPOSECPP_SHARED_API System::DateTime get_AccessedTime() const;
51 ASPOSECPP_SHARED_API System::DateTime get_CreationTime() const;
52
53 ASPOSECPP_SHARED_API bool get_EmitTimesInWindowsFormatWhenSaving() const;
54 ASPOSECPP_SHARED_API void set_EmitTimesInWindowsFormatWhenSaving(bool value);
55
56 ASPOSECPP_SHARED_API bool get_EmitTimesInUnixFormatWhenSaving() const;
57 ASPOSECPP_SHARED_API void set_EmitTimesInUnixFormatWhenSaving(bool value);
58
59 ASPOSECPP_SHARED_API ZipEntryTimestamp get_Timestamp() const;
60
61 ASPOSECPP_SHARED_API System::IO::FileAttributes get_Attributes() const;
62 ASPOSECPP_SHARED_API void set_Attributes(System::IO::FileAttributes value);
63
64 ASPOSECPP_SHARED_API bool get_ForceNoCompression() const;
65 ASPOSECPP_SHARED_API void set_ForceNoCompression(bool value);
66
67 ASPOSECPP_SHARED_API System::String get_FileName() const;
68 ASPOSECPP_SHARED_API void set_FileName(const System::String& value);
69
70 ASPOSECPP_SHARED_API System::IO::Stream::Ptr get_InputStream() const;
71 ASPOSECPP_SHARED_API void set_InputStream(const System::IO::Stream::Ptr& value);
72
73 ASPOSECPP_SHARED_API bool get_InputStreamWasJitProvided() const;
74
75 ASPOSECPP_SHARED_API ZipEntrySource get_Source() const;
76
77 ASPOSECPP_SHARED_API int16_t get_VersionNeeded() const;
78
79 ASPOSECPP_SHARED_API System::String get_Comment() const;
80 ASPOSECPP_SHARED_API void set_Comment(const System::String& value);
81
82 ASPOSECPP_SHARED_API System::Nullable<bool> get_RequiresZip64() const;
83 ASPOSECPP_SHARED_API System::Nullable<bool> get_OutputUsedZip64() const;
84
85 ASPOSECPP_SHARED_API int16_t get_BitField() const;
86
87 ASPOSECPP_SHARED_API int16_t get_CompressionMethod() const;
88 ASPOSECPP_SHARED_API void set_CompressionMethod(int16_t value);
89
90 ASPOSECPP_SHARED_API int64_t get_CompressedSize() const;
91 ASPOSECPP_SHARED_API int64_t get_UncompressedSize() const;
92
93 ASPOSECPP_SHARED_API double get_CompressionRatio() const;
94 ASPOSECPP_SHARED_API int get_Crc() const;
95
96 ASPOSECPP_SHARED_API System::SharedPtr<ZipFile> get_ZipFile() const;
97
98 ASPOSECPP_SHARED_API bool get_IsDirectory() const;
99 ASPOSECPP_SHARED_API bool get_UsesEncryption() const;
100
101 ASPOSECPP_SHARED_API EncryptionAlgorithm get_Encryption() const;
102 ASPOSECPP_SHARED_API void set_Encryption(EncryptionAlgorithm value);
103
104 ASPOSECPP_SHARED_API void set_Password(const System::String& value);
105
106 ASPOSECPP_SHARED_API bool get_OverwriteOnExtract() const;
107 ASPOSECPP_SHARED_API void set_OverwriteOnExtract(bool value);
108
109 ASPOSECPP_SHARED_API ExtractExistingFileAction get_ExtractExistingFile() const;
110 ASPOSECPP_SHARED_API void set_ExtractExistingFile(ExtractExistingFileAction value);
111
112 ASPOSECPP_SHARED_API ZipErrorAction get_ZipErrorAction() const;
113 ASPOSECPP_SHARED_API void set_ZipErrorAction(ZipErrorAction value);
114
115 ASPOSECPP_SHARED_API bool get_IncludedInMostRecentSave() const;
116
117 ASPOSECPP_SHARED_API ReReadApprovalCallback get_WillReadTwiceOnInflation() const;
118 ASPOSECPP_SHARED_API void set_WillReadTwiceOnInflation(ReReadApprovalCallback value);
119
120 ASPOSECPP_SHARED_API WantCompressionCallback get_WantCompression() const;
121 ASPOSECPP_SHARED_API void set_WantCompression(WantCompressionCallback value);
122
123 ASPOSECPP_SHARED_API bool get_UseUnicodeAsNecessary() const;
124 ASPOSECPP_SHARED_API void set_UseUnicodeAsNecessary(bool value);
125
126 ASPOSECPP_SHARED_API System::SharedPtr<System::Text::Encoding> get_ProvisionalAlternateEncoding() const;
127 ASPOSECPP_SHARED_API void set_ProvisionalAlternateEncoding(const System::SharedPtr<System::Text::Encoding>& value);
128
129 ASPOSECPP_SHARED_API System::SharedPtr<System::Text::Encoding> get_ActualEncoding() const;
130
131 ASPOSECPP_SHARED_API bool get_IsText() const;
132 ASPOSECPP_SHARED_API void set_IsText(bool value);
133
134 ASPOSECPP_SHARED_API void set_KeepCrcStreamPos(bool value);
135
136 ASPOSECPP_SHARED_API void SetEntryTimes(const System::DateTime& created, const System::DateTime& accessed, const System::DateTime& modified);
137 ASPOSECPP_SHARED_API void SetNtfsTimes(const System::DateTime& created, const System::DateTime& accessed, const System::DateTime& modified);
138
139 ASPOSECPP_SHARED_API System::String ToString() const override;
140
141 ASPOSECPP_SHARED_API void Extract();
142 ASPOSECPP_SHARED_API void Extract(bool overwrite);
143 ASPOSECPP_SHARED_API void Extract(ExtractExistingFileAction extractExistingFile);
144 ASPOSECPP_SHARED_API void Extract(const System::SharedPtr<System::IO::Stream>& stream);
145 ASPOSECPP_SHARED_API void Extract(const System::String& baseDirectory);
146 ASPOSECPP_SHARED_API void Extract(const System::String& baseDirectory, bool overwrite);
147 ASPOSECPP_SHARED_API void Extract(const System::String& baseDirectory, ExtractExistingFileAction extractExistingFile);
148
149 ASPOSECPP_SHARED_API void ExtractWithPassword(const System::String& password);
150 ASPOSECPP_SHARED_API void ExtractWithPassword(const System::String& baseDirectory, const System::String& password);
151 ASPOSECPP_SHARED_API void ExtractWithPassword(bool overwrite, const System::String& password);
152 ASPOSECPP_SHARED_API void ExtractWithPassword(ExtractExistingFileAction extractExistingFile, const System::String& password);
153 ASPOSECPP_SHARED_API void ExtractWithPassword(const System::String& baseDirectory, bool overwrite, const System::String& password);
154 ASPOSECPP_SHARED_API void ExtractWithPassword(const System::String& baseDirectory, ExtractExistingFileAction extractExistingFile, const System::String& password);
155 ASPOSECPP_SHARED_API void ExtractWithPassword(const System::SharedPtr<System::IO::Stream>& stream, const System::String& password);
156
157 ASPOSECPP_SHARED_API System::SharedPtr<CrcCalculatorStream> OpenReader();
158 ASPOSECPP_SHARED_API System::SharedPtr<CrcCalculatorStream> OpenReader(const System::String& password);
159
163 ASPOSECPP_SHARED_API System::SharedPtr<System::IO::Stream> GetCompressedStream();
164
168 ASPOSECPP_SHARED_API System::SharedPtr<System::Array<uint8_t>> GetCompressedBytes();
169
170protected:
172 ASPOSECPP_SHARED_API ~ZipEntry() override;
173 ASPOSECPP_SHARED_API System::String get_LocalFileName() const;
174 ASPOSECPP_SHARED_API int get_LengthOfCryptoHeaderBytes() const;
175 ASPOSECPP_SHARED_API int64_t get_FileDataPosition();
176
178 System::DateTime _LastModified;
179 System::String _LocalFileName;
180 int16_t _VersionNeeded;
181 int16_t _BitField;
182 int16_t _CompressionMethod;
183 System::String _Comment;
184 int64_t _CompressedSize;
185 int64_t _CompressedFileDataSize;
186 int64_t _UncompressedSize;
187 int _TimeBlob;
188 int _Crc32;
191 int64_t __FileDataPosition;
192 int64_t _RelativeOffsetOfLocalHeader;
193 int _LengthOfHeader;
194 int _LengthOfTrailer;
195 System::String _Password;
196 ZipEntrySource _Source;
197 EncryptionAlgorithm _Encryption;
198 System::ArrayPtr<uint8_t> _WeakEncryptionHeader;
200
201 bool get_AttributesIndicateDirectory() const;
202 ASPOSECPP_SHARED_API System::SharedPtr<System::IO::Stream> get_ArchiveStream();
203
204 static ASPOSECPP_SHARED_API System::String NameInArchive(const System::String& filename, const System::String& directoryPathInArchive);
205 static ASPOSECPP_SHARED_API System::SharedPtr<ZipEntry> Create(const System::String& filename, const System::String& nameInArchive);
206 static ASPOSECPP_SHARED_API System::SharedPtr<ZipEntry> Create(const System::String& filename, const System::String& nameInArchive, bool isStream, const System::SharedPtr<System::IO::Stream>& stream);
207 ASPOSECPP_SHARED_API void MarkAsDirectory();
208 ASPOSECPP_SHARED_API void ResetDirEntry();
209 static ASPOSECPP_SHARED_API System::SharedPtr<ZipEntry> ReadDirEntry(const System::SharedPtr<ZipFile>& zf);
210 static ASPOSECPP_SHARED_API bool IsNotValidZipDirEntrySig(int signature);
211 ASPOSECPP_SHARED_API void _SetTimes(const System::String& fileOrDirectory, bool isFile) const;
212 static ASPOSECPP_SHARED_API int ReadWeakEncryptionHeader(const System::SharedPtr<System::IO::Stream>& s, const System::ArrayPtr<uint8_t>& buffer);
213 static ASPOSECPP_SHARED_API System::SharedPtr<ZipEntry> Read(const System::SharedPtr<ZipFile>& zf, bool first);
214 static ASPOSECPP_SHARED_API void HandlePK00Prefix(const System::SharedPtr<System::IO::Stream>& s);
215 ASPOSECPP_SHARED_API int ProcessExtraField(int16_t extraFieldLength);
216 ASPOSECPP_SHARED_API void WriteCentralDirectoryEntry(const System::SharedPtr<System::IO::Stream>& s);
217 ASPOSECPP_SHARED_API void CopyMetaData(const System::SharedPtr<ZipEntry>& source);
218 ASPOSECPP_SHARED_API void Write(const System::SharedPtr<System::IO::Stream>& s);
219#ifdef ASPOSE_GET_SHARED_MEMBERS
220 ASPOSECPP_SHARED_API void GetSharedMembers(System::Object::shared_members_type& result) const override;
221#endif
222
223private:
224
225 int get_BufferSize() const;
226
227 ExtractExistingFileAction _ExtractExistingFile;
228 ZipErrorAction _ZipErrorAction;
229 ReReadApprovalCallback _WillReadTwiceOnInflation;
230 WantCompressionCallback _WantCompression;
231
232 int get_LengthOfHeader();
233
234 System::DateTime _Mtime, _Atime, _Ctime;
235 bool _ntfsTimesAreSet;
236 bool _emitNtfsTimes;
237 bool _emitUnixTimes;
238 bool _TrimVolumeFromFullyQualifiedPaths;
239 bool _ForceNoCompression;
240 System::String _FileNameInArchive;
241 bool _IsDirectory;
242 System::ArrayPtr<uint8_t> _CommentBytes;
243 bool _crcCalculated;
244 bool _metadataChanged;
245 bool _restreamRequiredOnSave;
246 bool _sourceIsEncrypted;
247 bool _skippedDuringSave;
248
250
251 System::SharedPtr<System::Text::Encoding> _provisionalAlternateEncoding;
253 System::ArrayPtr<uint8_t> _EntryHeader;
254 int64_t _TotalEntrySize;
255 bool _InputUsesZip64;
256 uint32_t _UnsupportedAlgorithmId;
258 System::Nullable<int64_t> _sourceStreamOriginalPosition;
259 bool _sourceWasJitProvided;
260 bool _ioOperationCanceled;
261 bool _presumeZip64;
262 System::Nullable<bool> _entryRequiresZip64;
263 System::Nullable<bool> _OutputUsesZip64;
264 bool _IsText;
265 ZipEntryTimestamp _timestamp;
266 static System::DateTime _unixEpoch;
267 int16_t _VersionMadeBy;
268 int16_t _InternalFileAttrs;
269 int _ExternalFileAttrs;
270 int16_t _filenameLength;
271 int16_t _extraFieldLength;
272 int16_t _commentLength;
273 bool _keepCrcStreamPos;
274
275 System::String get_UnsupportedAlgorithm() const;
276 System::String get_UnsupportedCompressionMethod() const;
277 bool get_IsDeflated() const;
278
286 int16_t get_CompressionFlags() const;
287
288 int _readExtraDepth;
290
291 void SetFdpLoh();
292 System::SharedPtr<CrcCalculatorStream> InternalOpenReader(const System::String& password);
293 void OnExtractProgress(int64_t bytesWritten, int64_t totalBytesToWrite);
294 void OnBeforeExtract(const System::String& path);
295 void OnAfterExtract(const System::String& path);
296 void OnExtractExisting(const System::String& path);
297 void OnWriteBlock(int64_t bytesXferred, int64_t totalBytesToXfer);
298 static void ReallyDelete(const System::String& fileName);
299 void InternalExtract(const System::String& baseDir, const System::SharedPtr<System::IO::Stream>& outstream, const System::String& password);
300 void ExternalExtractFinalization(const System::String& TargetFile, const System::SharedPtr<System::IO::Stream>& output, bool fileExistsBeforeExtraction) const;
301 int CheckExtractExistingFile(const System::String& baseDir, const System::String& TargetFile);
302 void _CheckRead(int nbytes) const;
303 int _ExtractOne(const System::SharedPtr<System::IO::Stream>& output);
304 void ValidateEncryption() const;
305 void ValidateCompression() const;
306 void SetupCrypto(const System::String& password);
307 bool ValidateOutput(const System::String& basedir, const System::SharedPtr<System::IO::Stream>& outstream, System::String &OutputFile) const;
308 void ReadExtraField();
309 static bool ReadHeader(const System::SharedPtr<ZipEntry>& ze, const System::SharedPtr<System::Text::Encoding>& defaultEncoding);
310 static bool IsNotValidSig(int signature);
311 static void HandleUnexpectedDataDescriptor(const System::SharedPtr<ZipEntry>& entry);
312 int ProcessExtraFieldPkwareStrongEncryption(const System::ArrayPtr<uint8_t>& Buffer, int j);
313 int ProcessExtraFieldZip64(const System::ArrayPtr<uint8_t>& Buffer, int32_t j, int16_t DataSize, int64_t posn);
314 int ProcessExtraFieldInfoZipTimes(const System::ArrayPtr<uint8_t>& Buffer, int32_t j, int16_t DataSize, int64_t posn);
315 int ProcessExtraFieldUnixTimes(const System::ArrayPtr<uint8_t>& Buffer, int32_t j, int16_t DataSize, int64_t posn);
316 int ProcessExtraFieldWindowsTimes(const System::ArrayPtr<uint8_t>& Buffer, int32_t j, int16_t DataSize, int64_t posn);
317 void _ConsAndWriteCentralDirectoryEntry(const System::SharedPtr<System::IO::Stream>& s);
318 System::ArrayPtr<uint8_t> ConsExtraField(bool forCentralDirectory) const;
319 System::SharedPtr<System::Text::Encoding> GenerateCommentBytes();
320 System::ArrayPtr<uint8_t> _GetEncodedFileNameBytes();
321 bool WantReadAgain() const;
322 static bool SeemsCompressible(const System::String& filename);
323 bool DefaultWantCompression() const;
324 void FigureCompressionMethodForWriting(int cycle);
325 void WriteHeader(const System::SharedPtr<System::IO::Stream>& s, int cycle);
326 int FigureCrc32();
327 void PrepSourceStream();
328 void _WriteFileData(const System::SharedPtr<System::IO::Stream>& s);
329 void OnZipErrorWhileSaving(const System::Exception& e);
330 void _EmitOne(const System::SharedPtr<System::IO::Stream>& outstream);
331 void _WriteSecurityMetadata(const System::SharedPtr<System::IO::Stream>& outstream);
332 void CopyThroughOneEntry(const System::SharedPtr<System::IO::Stream>& outstream);
333 void CopyThroughWithRecompute(const System::SharedPtr<System::IO::Stream>& outstream, const System::SharedPtr<CrcCalculatorStream>& input1);
334 void CopyThroughWithNoChange(const System::SharedPtr<System::IO::Stream>& outstream, const System::SharedPtr<CrcCalculatorStream>& input1);
335
336};
337
338}} // namespace Aspose::Zip
339
340#endif // _aspose_zip_zip_entry_h_
341
Represents a specific date and time value on the time continuum. This type should be allocated on sta...
Definition: date_time.h:50
Template that represents wrapper of exceptions that are derived from Exception class.
Definition: exception.h:113
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:62
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
String class used across the library. Is a substitute for C# System.String when translating code....
Definition: string.h:122
Subclass of System::SmartPtr which sets itself to weak mode at construction. Please note that this cl...
Definition: weak_ptr.h:18
@ Create
Create a new file. If the file already exists, it is overwritten.
FileAttributes
Represents attributes of a directory or a file.
Definition: file_attributes.h:9