My Project
|
Both the zip and ParaEngine's pkg file encryption logics are supported. More...
#include <ZipArchive.h>
Public Member Functions | |
CZipArchive (bool bIgnoreCase) | |
virtual DWORD | GetType () |
ATTRIBUTE_DEFINE_CLASS (CZipArchive) | |
ATTRIBUTE_METHOD1 (CZipArchive, SetBaseDirectory_s, const char *) | |
ATTRIBUTE_METHOD1 (CZipArchive, GetRootDirectory_s, const char **) | |
ATTRIBUTE_METHOD1 (CZipArchive, SetRootDirectory_s, const char *) | |
virtual int | InstallFields (CAttributeClass *pClass, bool bOverride) |
this class should be implemented if one wants to add new attribute. More... | |
virtual bool | Open (const string &sArchiveName, int nPriority) |
open archive | |
virtual void | Close () |
close archive | |
virtual bool | DoesFileExist (const string &filename) |
Check whether a given file exists. More... | |
virtual bool | OpenFile (const char *filename, FileHandle &handle) |
Open a file for immediate reading. More... | |
virtual bool | OpenFile (const ArchiveFileFindItem *item, FileHandle &handle) |
Open a file for immediate reading. More... | |
bool | OpenMemFile (const char *buffer, DWORD nLen, bool bDeleteBuffer=true) |
virtual DWORD | GetFileSize (FileHandle &handle) |
get file size. More... | |
virtual bool | ReadFile (FileHandle &handle, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead) |
read file. More... | |
virtual bool | ReadFileRaw (FileHandle &handle, LPVOID *lppBuffer, LPDWORD pnCompressedSize, LPDWORD pnUncompressedSize) |
read the raw (may be compressed file) More... | |
virtual bool | CloseFile (FileHandle &hFile) |
close file. More... | |
virtual void | SetRootDirectory (const string &filename) |
set root directory More... | |
const std::string & | GetRootDirectory () |
get root directory. More... | |
virtual void | SetBaseDirectory (const char *filename) |
set the base directory to be removed from the relative path of all files in the zip file. More... | |
virtual void | FindFiles (CSearchResult &result, const string &sRootPath, const string &sFilePattern, int nSubLevel) |
this is a recursive function. More... | |
bool | GeneratePkgFile (const char *filename) |
Generate a pkg file which is equivalent to the currently loaded zip file. More... | |
bool | GeneratePkgFile2 (const char *filename) |
int | GetFileCount () |
get total file count. More... | |
virtual bool | IsIgnoreCase () const |
![]() | |
ATTRIBUTE_DEFINE_CLASS (CArchive) | |
virtual const std::string & | GetIdentifier () |
const string & | GetArchiveName () const |
virtual bool | IsArchive (const std::string &sFilename) |
whether the archive represent the given file. More... | |
virtual bool | WriteFile (FileHandle &handle, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten) |
virtual bool | CreateNewFile (const char *filename, FileHandle &handle, bool bAutoMakeFilePath=true) |
create a new file for writing More... | |
![]() | |
virtual int | GetAttributeClassID () |
attribute class ID should be identical, unless one knows how overriding rules work. More... | |
virtual const char * | GetAttributeClassName () |
a static string, describing the attribute class object's name | |
virtual const char * | GetAttributeClassDescription () |
a static string, describing the attribute class object | |
virtual int | GetChildAttributeColumnCount () |
we support multi-dimensional child object. More... | |
virtual int | GetChildAttributeObjectCount (int nColumnIndex=0) |
get the number of child objects (row count) in the given column. More... | |
virtual IAttributeFields * | GetChildAttributeObject (int nRowIndex, int nColumnIndex=0) |
virtual IAttributeFields * | GetChildAttributeObject (const std::string &sName) |
get attribute by child object. More... | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetName_s, const char **) | |
ATTRIBUTE_METHOD1 (IAttributeFields, SetName_s, const char *) | |
ATTRIBUTE_METHOD (IAttributeFields, PrintObject_s) | |
ATTRIBUTE_METHOD (IAttributeFields, AddRef_s) | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetRefCount_s, int *) | |
ATTRIBUTE_METHOD1 (IAttributeFields, SetTime_s, int) | |
ATTRIBUTE_METHOD1 (IAttributeFields, GetTime_s, int *) | |
ATTRIBUTE_METHOD (IAttributeFields, Release_s) | |
virtual void | SetIdentifier (const std::string &sID) |
virtual bool | IsModified () |
whether some of the fields are modified.It is up to the implementation class to provide this functionality if necessary. More... | |
virtual void | SetModified (bool bModified) |
set whether any field has been modified. More... | |
virtual bool | ValidateFields () |
validate all fields and return true if validation passed. More... | |
virtual string | GetValidationMessage () |
get the recent validation message due to the most recent call to ValidateFields() | |
virtual bool | ResetField (int nFieldID) |
Reset the field to its initial or default value. More... | |
virtual bool | InvokeEditor (int nFieldID, const std::string &sParameters) |
Invoke an (external) editor for a given field. More... | |
virtual bool | AddChildAttributeObject (IAttributeFields *pChild, int nRowIndex=-1, int nColumnIndex=0) |
add child object. More... | |
virtual void * | QueryObjectByName (const std::string &sObjectType) |
convert to object of a given type. More... | |
virtual void * | QueryObject (int nObjectType) |
convert to object of a given type. More... | |
virtual int | GetTime () |
get the current local time in case it is animated in milli seconds frames. More... | |
virtual void | SetTime (int nTime) |
virtual CDynamicAttributeField * | GetDynamicField (const std::string &sName) |
Get a dynamic field with a given name. More... | |
virtual CDynamicAttributeField * | GetDynamicField (int nIndex) |
Get a dynamic field with a given index. More... | |
virtual const char * | GetDynamicFieldNameByIndex (int nIndex) |
get field name by index | |
virtual int | GetDynamicFieldCount () |
how many dynamic field this object currently have. More... | |
virtual int | SetDynamicField (const std::string &sName, const CVariable &value) |
set a dynamic field with a given name. More... | |
virtual int | AddDynamicField (const std::string &sName, ATTRIBUTE_FIELDTYPE dwType) |
add dynamic field and return field index | |
virtual void | RemoveAllDynamicFields () |
remove all dynamic fields | |
virtual int | SaveDynamicFieldsToString (std::string &output) |
save only text dynamic fields to fieldname = value text strings. More... | |
virtual int | LoadDynamicFieldsFromString (const std::string &input) |
load only text dynamic fields from string More... | |
CAttributeClass * | GetAttributeClass () |
get the main attribute class object. More... | |
void | PrintObject () |
print the content of this object to a text file at temp/doc/[ClassName].txt. More... | |
![]() | |
virtual void | Clone (IObject *obj) const |
Clone the object's contains to a pointer. More... | |
virtual IObject * | Clone () const |
Clone the object's contains and return a pointer to the newly created object. More... | |
virtual bool | Equals (const IObject *obj) const |
Compare the object with another object. More... | |
virtual const IType * | GetType () const |
virtual std::string | ToString () const |
WeakPtr_type & | GetWeakReference () |
get weak reference object. More... | |
virtual int | ProcessObjectEvent (const ObjectEvent &event) |
this function is only used to backward compatibility of ParaObject:AddEvent() function. More... | |
![]() | |
void | addref () const |
add reference count of the object. More... | |
bool | delref () const |
decrease reference count of the object. More... | |
int | GetRefCount () const |
get the reference count | |
virtual int | Release () |
CRefCounted * | AddToAutoReleasePool () |
addref and releases the ownership sometime soon automatically (usually at the end of the current frame). More... | |
Static Public Member Functions | |
static DWORD | TypeID () |
static bool | Decompress (LPVOID lpCompressedBuffer, DWORD nCompressedSize, LPVOID lpUnCompressedBuffer, DWORD nUncompressedSize) |
decompress a file buffer | |
![]() | |
static DWORD | TypeID () |
![]() | |
static HRESULT | GetAttributeClassID_s (IAttributeFields *cls, int *p1) |
static HRESULT | GetAttributeClassName_s (IAttributeFields *cls, const char **p1) |
static bool | OpenWithDefaultEditor (const char *sFilename, bool bWaitOnReturn=false) |
Open a given file with the default registered editor in the game engine. More... | |
Additional Inherited Members | |
![]() | |
typedef ParaEngine::weak_ptr< IObject, IAttributeFields > | WeakPtr_type |
![]() | |
typedef ParaEngine::weak_ptr< IObject > | WeakPtr_type |
![]() | |
virtual CAttributeClass * | CreateAttributeClass () |
initialize fields | |
virtual CDynamicAttributesSet * | GetDynamicAttributes (bool bCreateIfNotExist=false) |
![]() | |
string | m_filename |
file name | |
FileHandle | m_archiveHandle |
bool | m_bOpened |
int | m_nPriority |
![]() | |
WeakPtr_type | m_weak_reference |
![]() | |
int | m_refcount |
Both the zip and ParaEngine's pkg file encryption logics are supported.
pkg file is a slightly encrypted version of zip file.
if(sArchiveName is "[filename].pkg") then Load "[filename].pkg" return end Suppose the loaded sArchiveName is "[filename].zip", if(At debug mode) then if "[filename].zip" does not exist then if "[filename].pkg" exists then Load "[filename].pkg" else No file loaded. end else if "[filename].pkg" exists and its modified date is newer than the "[filename].zip" then Load "[filename].pkg" else Load "[filename].zip" generate a new file called "[filename].pkg" based on "[filename].zip" end end else if "[filename].zip" exist then Load "[filename].zip" else if "[filename].pkg" exist then Load "[filename].pkg" else No file loaded. end end
It uses the ZIP file's CentralDirectory record at the end of the zip file to build the file list for random file access.
char[4] <file type="" id>=""> ".pkg" byte[4] <pkg file="" version>=""> 0.0.0.1 [int] <length of="" string>=""> [string] "ParaEngine Tech Studio Package File Format. Please note that content in this file is meant to be protected and copyrighted by their author(s). Decoding this pkg file is illegal." [int] reserved1 [int] reserved2 [int] reserved3 [int] reserved4 [int] Central Directory Size in Bytes [int] number of directory record [item 1]: LenOfFilename, filename, compression method, compressed size,uncompressed size, fileDataPosition(this field is encrypted) ... [item n]
... [data n]
|
virtual |
close file.
Implements ParaEngine::CArchive.
|
virtual |
Check whether a given file exists.
filename | file name to check |
Implements ParaEngine::CArchive.
|
virtual |
this is a recursive function.
Finding a file inside the zip. search files at once.
sRootPath | the parent path inside the zip where to search for. for example: "", "xmodel/","xmodel/models/". Other format is not acceptable |
sFilePattern | file pattern, e.g. "*.x" (all files with x extension), "*" (any files), "*."(directories only) |
nSubLevel | how many sub folders of sRootPath to look into. default value is 0, which only searches the sRootPath folder. Note: currently only we only support nSubLevel=0 |
Reimplemented from ParaEngine::CArchive.
bool CZipArchive::GeneratePkgFile | ( | const char * | filename | ) |
Generate a pkg file which is equivalent to the currently loaded zip file.
This function can only be called, when a zip file has been successfully loaded.
filename | the pkg file name to be generated. It will overwrite existing file |
int CZipArchive::GetFileCount | ( | ) |
get total file count.
|
virtual |
get file size.
Implements ParaEngine::CArchive.
const std::string & ParaEngine::CZipArchive::GetRootDirectory | ( | ) |
get root directory.
all relative file path in zip files is regarded as relative to this directory.
|
virtual |
this class should be implemented if one wants to add new attribute.
This function is always called internally.
Reimplemented from ParaEngine::IAttributeFields.
|
virtual |
Open a file for immediate reading.
It could be either a zip file or a pkg file. call getBuffer() to retrieval the data
filename | the file name to open |
handle | to the opened file. |
Implements ParaEngine::CArchive.
|
virtual |
Open a file for immediate reading.
call getBuffer() to retrieval the data
item | the file find item to open |
handle | to the opened file. |
Implements ParaEngine::CArchive.
|
virtual |
read file.
Implements ParaEngine::CArchive.
|
virtual |
read the raw (may be compressed file)
lppBuffer | the buffer to hold the (compressed) output data. one need to use the SAFE_DELETE_ARRAY() to delete the output data. |
pnCompressedSize | output the size of the compressed data |
pnUncompressedSize:output | the size of the uncompressed data. if 0, it means that the data is not compressed. |
Reimplemented from ParaEngine::CArchive.
|
virtual |
set the base directory to be removed from the relative path of all files in the zip file.
call this function only once, it will actually modify the relative file path.
Reimplemented from ParaEngine::CArchive.
|
virtual |
set root directory
filename | the parent directory filename will be regarded as the root directory. m_bRelativePath will be set to false if filename or its parent directory is ""; otherwise it will be set to true. |
Reimplemented from ParaEngine::CArchive.