libMVRgdtf 40bc00a
A library for GDTF and MVR
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
ZIPFileImpl.h
Go to the documentation of this file.
1/*
2 * ZIPFileImpl.h
3 * VectorWorks
4 *
5 * Created by Yavor Simeonov on 12/05/10.
6 * Copyright 2010 Nemetschek North America, Inc. All rights reserved.
7 *
8 */
9
10#pragma once
11
12#include "ZIPFileBuffer.h"
13
14namespace VectorworksMVR
15{
16 namespace Filing
17 {
18 /*namespace ZIP
19 {*/
20
21 const Uint64 kLocalFileInfoSignature = 0x04034b50L;
22 const Uint64 kCentralDirSignature = 0x02014b50L;
23 const Uint64 kEndSignature = 0x06054b50L;
24 const Uint64 kExtraDataSignature = 0x08074b50L;
25
39
40 typedef std::vector<VectorworksMVR::Filing::SZIPFileInfo> TZIPFileInfoArray;
41 // ----------------------------------------------------------------------------------------------------
43 {
44 public:
46 virtual ~CZIPFileIOBufferImpl();
47
48 public:
49 virtual VCOMError VCOM_CALLTYPE GetDataSize(size_t& outSize);
50 virtual VCOMError VCOM_CALLTYPE CopyDataInto(void* pBuffer, size_t bufferSize);
51 virtual VCOMError VCOM_CALLTYPE AppendData( void* pBuffer, size_t bufferSize );
52 virtual VCOMError VCOM_CALLTYPE SetData(void* pBuffer, size_t bufferSize);
53
54 private:
55 Uint8* fpZIPDataBuffer;
56 size_t fZIPDataBufferSize;
57
58 };
59
60 // ----------------------------------------------------------------------------------------------------
61
62 class CZIPFileImpl : public VCOMImpl<IZIPFile>
63 {
64 public:
66 virtual ~CZIPFileImpl();
67
68 public:
70 virtual VCOMError VCOM_CALLTYPE OpenRead(const char* buffer, size_t length);
72 virtual VCOMError VCOM_CALLTYPE OpenNewWrite(IFileIdentifier* pFileID, bool compressFiles = true);
74 virtual VCOMError VCOM_CALLTYPE ToBuffer(char*& p, size_t& lengt);
75
76
77 virtual VCOMError VCOM_CALLTYPE GetSize(Uint64& outValue);
78
79 // 'path' uses '/' delimited string to identify a file or folder within the zip file
80 // empty 'path' denotes the root folder of the zip file
81
82 virtual VCOMError VCOM_CALLTYPE GetNextFile(const std::string& path, std::string& outPath);
83 virtual VCOMError VCOM_CALLTYPE GetNextFile(const std::string& path, const std::string& extension, std::string& outPath);
84
85 virtual VCOMError VCOM_CALLTYPE GetFileInfo(const std::string& path, SZIPFileInfo& outInfo);
86
87 virtual VCOMError VCOM_CALLTYPE GetFile(const std::string& path, IZIPFileIOBuffer* outputBuffer);
88 virtual VCOMError VCOM_CALLTYPE GetFile(const std::string& path, IFileIdentifier* outputFile);
89
90 virtual VCOMError VCOM_CALLTYPE AddFile(const TXString& path, IZIPFileIOBuffer* inputBuffer);
91 virtual VCOMError VCOM_CALLTYPE AddFile(const TXString& path, IFileIdentifier* inputFile);
92
93 virtual VCOMError VCOM_CALLTYPE RemoveFile(const TXString& path);
94 virtual VCOMError VCOM_CALLTYPE MoveFile(const TXString& path);
95
96 public:
97 size_t Deflate( void* pData, size_t dataSize, void* outData );
98 bool Inflate( void* pData, size_t dataSize, IZIPFileIOBuffer* outBuffer );
99 public:
100
101 bool Write( IZIPFileIOBuffer* inputBuffer, IFileIdentifier* pFileID );
102 void WriteLong( Uint32 toWrite, Uint64& currentWritePosition );
103 void WriteShort( Uint16 toWrite, Uint64& currentWritePosition );
104 void WriteToFile( void* toWrite, Uint64& currentWritePosition, Uint64 size );
105
106 bool Read( IZIPFileIOBuffer* outputBuffer, IFileIdentifier* pFileID );
107 void ReadLong( Uint32& outRead, Uint32& currentReadPosition );
108 void ReadShort( Uint16& outRead, Uint32& currentreadPosition );
109 void ReadFromFile( Uint32& currentReadPosition, Uint64& inOutReadSize, void* toRead );
110
111 void WriteLocalFileHeader( SZIPFileInfo* fileInfo, Uint64& currentWritePosition );
112 void WriteCentralDirectoryHeader( SZIPArchiveInfo* zipArchiveInfo, TZIPFileInfoArray* fileInfoArray, Uint64& currentWritePosition );
113 void WriteCentralDirectoryHeader( SZIPArchiveInfo* zipArchiveInfo, SZIPFileInfo* fileInfo, Uint64& currentWritePosition );
114 void WriteEndHeader( SZIPArchiveInfo* zipArchiveInfo, Uint64& currentWritePosition );
115
116 void GetCentralDirPosition( Uint32& outPosition );
117 void GetEndOfCentralDirPosition( Uint32& outPosition );
118 void GetFileCentralHeaderPosition( const std::string& path, Uint32& outPosition );
119 void GetFileLocalHeaderPosition( const std::string& path, Uint32& outPosition );
120
121 void GetZipArchiveInfo( SZIPArchiveInfo* zipArchiveInfo );
122 void GetDosDateAndTime( Uint16& dosDate, Uint16& dosTime);
123
124 private:
125
126 bool fbOpenedWrite;
127 bool fbCompressFiles;
128
129 ZIPFileBuffer* fpOpenedFile;
130 VCOMPtr<IFileIdentifier> fpOpenedFileID;
131
132 TXString fOpenedFileFullPath;
133 TXString fFolderPath;
134 char fReadFileName[1024];
135 private:
136 static VCOMError fLastError;
137
138 };
139 }
140}
141/*}*/
142
143
uint8_t Uint8
Definition GSTypes.h:25
uint16_t Uint16
Definition GSTypes.h:26
uint64_t Uint64
Definition GSTypes.h:28
uint32_t Uint32
Definition GSTypes.h:27
#define VCOM_CALLTYPE
Definition VectorworksMVR.h:93
Definition StdAfx.h:187
CZIPFileIOBufferImpl()
Definition ZIPFileImpl.cpp:47
virtual VCOMError VCOM_CALLTYPE GetDataSize(size_t &outSize)
Definition ZIPFileImpl.cpp:61
virtual VCOMError VCOM_CALLTYPE SetData(void *pBuffer, size_t bufferSize)
Definition ZIPFileImpl.cpp:101
virtual ~CZIPFileIOBufferImpl()
Definition ZIPFileImpl.cpp:53
virtual VCOMError VCOM_CALLTYPE AppendData(void *pBuffer, size_t bufferSize)
Definition ZIPFileImpl.cpp:77
virtual VCOMError VCOM_CALLTYPE CopyDataInto(void *pBuffer, size_t bufferSize)
Definition ZIPFileImpl.cpp:67
Definition ZIPFileImpl.h:63
void GetZipArchiveInfo(SZIPArchiveInfo *zipArchiveInfo)
Definition ZIPFileImpl.cpp:1293
void ReadFromFile(Uint32 &currentReadPosition, Uint64 &inOutReadSize, void *toRead)
Definition ZIPFileImpl.cpp:1044
void WriteCentralDirectoryHeader(SZIPArchiveInfo *zipArchiveInfo, TZIPFileInfoArray *fileInfoArray, Uint64 &currentWritePosition)
Definition ZIPFileImpl.cpp:1069
virtual VCOMError VCOM_CALLTYPE GetSize(Uint64 &outValue)
Definition ZIPFileImpl.cpp:239
virtual VCOMError VCOM_CALLTYPE GetNextFile(const std::string &path, std::string &outPath)
Definition ZIPFileImpl.cpp:252
virtual VCOMError VCOM_CALLTYPE MoveFile(const TXString &path)
Definition ZIPFileImpl.cpp:784
virtual VCOMError VCOM_CALLTYPE OpenNewWrite(IFileIdentifier *pFileID, bool compressFiles=true)
Definition ZIPFileImpl.cpp:198
virtual VCOMError VCOM_CALLTYPE GetFile(const std::string &path, IZIPFileIOBuffer *outputBuffer)
Definition ZIPFileImpl.cpp:410
virtual VCOMError VCOM_CALLTYPE OpenRead(IFileIdentifier *pFileID)
Definition ZIPFileImpl.cpp:137
void WriteEndHeader(SZIPArchiveInfo *zipArchiveInfo, Uint64 &currentWritePosition)
Definition ZIPFileImpl.cpp:1123
virtual VCOMError VCOM_CALLTYPE AddFile(const TXString &path, IZIPFileIOBuffer *inputBuffer)
Definition ZIPFileImpl.cpp:473
bool Inflate(void *pData, size_t dataSize, IZIPFileIOBuffer *outBuffer)
Definition ZIPFileImpl.cpp:810
CZIPFileImpl()
Definition ZIPFileImpl.cpp:115
virtual VCOMError VCOM_CALLTYPE Close()
Definition ZIPFileImpl.cpp:221
void WriteLong(Uint32 toWrite, Uint64 &currentWritePosition)
Definition ZIPFileImpl.cpp:935
void ReadShort(Uint16 &outRead, Uint32 &currentreadPosition)
Definition ZIPFileImpl.cpp:1024
virtual VCOMError VCOM_CALLTYPE ToBuffer(char *&p, size_t &lengt)
Definition ZIPFileImpl.cpp:233
void GetFileLocalHeaderPosition(const std::string &path, Uint32 &outPosition)
Definition ZIPFileImpl.cpp:1188
virtual VCOMError VCOM_CALLTYPE GetFileInfo(const std::string &path, SZIPFileInfo &outInfo)
Definition ZIPFileImpl.cpp:336
bool Write(IZIPFileIOBuffer *inputBuffer, IFileIdentifier *pFileID)
Definition ZIPFileImpl.cpp:911
void GetFileCentralHeaderPosition(const std::string &path, Uint32 &outPosition)
Definition ZIPFileImpl.cpp:1240
void GetEndOfCentralDirPosition(Uint32 &outPosition)
Definition ZIPFileImpl.cpp:1164
void WriteToFile(void *toWrite, Uint64 &currentWritePosition, Uint64 size)
Definition ZIPFileImpl.cpp:971
void GetCentralDirPosition(Uint32 &outPosition)
Definition ZIPFileImpl.cpp:1136
virtual VCOMError VCOM_CALLTYPE OpenWrite(IFileIdentifier *pFileID)
Definition ZIPFileImpl.cpp:175
void ReadLong(Uint32 &outRead, Uint32 &currentReadPosition)
Definition ZIPFileImpl.cpp:1004
void WriteLocalFileHeader(SZIPFileInfo *fileInfo, Uint64 &currentWritePosition)
Definition ZIPFileImpl.cpp:1053
size_t Deflate(void *pData, size_t dataSize, void *outData)
Definition ZIPFileImpl.cpp:866
bool Read(IZIPFileIOBuffer *outputBuffer, IFileIdentifier *pFileID)
Definition ZIPFileImpl.cpp:980
void GetDosDateAndTime(Uint16 &dosDate, Uint16 &dosTime)
Definition ZIPFileImpl.cpp:1329
virtual VCOMError VCOM_CALLTYPE RemoveFile(const TXString &path)
Definition ZIPFileImpl.cpp:677
void WriteShort(Uint16 toWrite, Uint64 &currentWritePosition)
Definition ZIPFileImpl.cpp:954
virtual ~CZIPFileImpl()
Definition ZIPFileImpl.cpp:128
Definition IFileIdentifier.h:21
Definition ZIPFileBuffer.h:12
Definition GSString.h:134
Definition VectorworksMVR.h:149
const Uint64 kEndSignature
Definition ZIPFileImpl.h:23
const Uint64 kCentralDirSignature
Definition ZIPFileImpl.h:22
const Uint64 kLocalFileInfoSignature
Definition ZIPFileImpl.h:21
std::vector< VectorworksMVR::Filing::SZIPFileInfo > TZIPFileInfoArray
Definition ZIPFileImpl.h:40
const Uint64 kExtraDataSignature
Definition ZIPFileImpl.h:24
Definition CieColor.h:9
uint32_t VCOMError
Definition VectorworksMVR.h:119
Definition ZIPFileImpl.h:27
Uint16 dwStartingDiskNumber
Definition ZIPFileImpl.h:36
Uint16 dwCommentLength
Definition ZIPFileImpl.h:37
Uint32 dwOffsetCentralDir
Definition ZIPFileImpl.h:35
Uint16 dwTotalNumberOfEntries
Definition ZIPFileImpl.h:33
Uint16 dwNumberOfThisDisk
Definition ZIPFileImpl.h:30
Uint16 dwNumberOfCentralDirDisk
Definition ZIPFileImpl.h:31
Uint32 dwSizeOfCentralDir
Definition ZIPFileImpl.h:34
TXString fFileComment
Definition ZIPFileImpl.h:28
Uint16 dwNumberOfEntriesOnThisDisk
Definition ZIPFileImpl.h:32
Definition IZIPFile.h:18