📄 io.h
字号:
/*
* BREW Extension Library
* Copyright (c) 2003-2005 ANYSOFT.CN
* All Rights Reserved.
*/
/*!-----------------------------------
@file
@brief IO文件读写与对象的序列化
-----------------------------------*/
/*!
@defgroup IO IO Module/IO文件读写与类的序列化
*/
#ifndef __IO_H
#define __IO_H
#include "CommonDEF.H"
#include "AppFrame.H"
#include "AEEFile.h"
#include "AEEShell.h"
#define SERIAL_LOAD TRUE // 用Serialize(SERIAL_LOAD)显式读取对象
#define SERIAL_SAVE FALSE // 用Serialize(SERIAL_LOAD)显式保存对象
#define USER_OBJ_ID 1
/*!
@brief 在OnSerialize()中序列化开始时使用的宏
@param BaseClass 基类名(SerialObj或派生于SerialObj)
@param _pFile Serialize()传入的SafeFile指针
@param bLoading 读取或保存
*/
#define BEGIN_SERIAL(BaseClass,pFile,bLoading) \
SafeFile* _pFile =pFile;\
BOOL _bLoading =bLoading;\
BaseClass##::OnSerialize(_pFile,_bLoading)
/*!
@brief 在OnSerialize()中使用的宏,用于可序列化对象
@param SerialObj 派生于SerialObj的类的对象
*/
#define SERIAL_OBJ(SerialObj) \
(SerialObj).OnSerialize(_pFile,_bLoading)
/*!
@brief 在OnSerialize()中使用的宏,用于可序列化对象
@param pSerialObj 派生于SerialObj的类的对象的指针
*/
#define SERIAL_OBJ_EX(pSerialObj) \
(pSerialObj)->OnSerialize(_pFile,_bLoading)
/*!
@brief 在OnSerialize()中使用的宏,用于非序列化对象
@param Data 需要序列化的变量
*/
#define SERIAL_DATA(Data) \
do{\
if (_bLoading)\
_pFile->Read(&(Data),sizeof(Data));\
else\
_pFile->Write(&(Data),sizeof(Data));\
}while(0)
/*!
@brief 在OnSerialize()中使用的宏,用于非序列化对象
@param pvBuf 需要序列化的变量的指针
@param dwBufSize 需要序列化的字节数
*/
#define SERIAL_DATA_EX(pvBuf,dwBufSize) \
do{\
if (_bLoading)\
_pFile->Read((pvBuf),(dwBufSize));\
else\
_pFile->Write((pvBuf),(dwBufSize));\
}while(0)
/*!
@brief 在OnSerialize()中序列化结束时使用的宏
*/
#define END_SERIAL()
/*!
@brief 用于读取对象
@param __pShell__ IShell指针
@param __dwID__ 对象的全局唯一的ID,必须大于USER_OBJ_ID,
INVALID_ID(-1)不可用
*/
#define LOAD_OBJECT(__pShell__,__dwID__) \
do{\
m_pShell =(__pShell__);\
m_dwID =(__dwID__);\
ASSERT(m_pShell);\
ASSERT(m_dwID!=INVALID_ID);\
VERIFY(Serialize(SERIAL_LOAD));\
}while(0)
/*!
@brief 用于保存对此项的宏
*/
#define SAVE_OBJECT() \
do{\
if (m_bDirty)\
{\
VERIFY(Serialize(SERIAL_SAVE));\
m_bDirty=FALSE;\
}\
}while(0)
/*!
@ingroup IO
@brief 提供了对IFileMgr和IFile接口的封装,
并提供了SafeMode以保证文件的完整性,
大部分函数的说明请参看BREW SDK
*/
class SafeFile:public BREWObj
{
public:
SafeFile(IShell* pShell=NULL);
~SafeFile();
BOOL Create(IShell* pShell);
void Release(BOOL bOnlyMgr=FALSE);
BOOL IsSafeMode();
OpenFileMode GetOpenMode();
BOOL EnumInit(PCSTR pszDir,BOOL bDirs);
BOOL EnumNext(FileInfo* pInfo);
BOOL EnumNextEx(AEEFileInfoEx* pInfoEx);
BOOL GetInfo(PCSTR pszName,FileInfo* pInfo);
BOOL GetInfoEx(PCSTR pszName,AEEFileInfoEx* pInfoEx);
BOOL GetFileUseInfo(AEEFileUseInfo* pUseInfo);
BOOL SetDescription(PCSTR pszName,AECHAR* pszDesc);
DWORD GetFreeSpace(PDWORD pdwTotal);
BOOL TestExisting(PCSTR pszName);
BOOL CreateDir(PCSTR pszDir);
BOOL RemoveDir(PCSTR pszDir);
BOOL RemoveFile(PCSTR pszName);
BOOL RenameFile(PCSTR pszSrc,PCSTR pszDest) ;
BOOL IncFileRef(PCSTR pszName);
BOOL DecFileRef(PCSTR pszName);
int GetLastError();
BOOL CreateFile(PCSTR pszFile,DWORD dwSize,BOOL bSafeMode=TRUE); //!!!
BOOL OpenFile(PCSTR pszFile,OpenFileMode Mode,BOOL bSafeMode=TRUE); //!!!
BOOL CloseFile(); //!!!
BOOL SetFileNotify(PFNNOTIFY pfn,PVOID pvParam);
BOOL CancelFileNotify(PFNNOTIFY pfn,PVOID pvParam);
DWORD SetCacheSize(DWORD dwSize);
BOOL GetFileInfo(FileInfo * pInfo);
BOOL GetFileInfoEx(AEEFileInfoEx* pInfoEx);
BOOL Seek(FileSeekType Type,SDWORD sdwOffset); //!!!
DWORD GetCurrentPos(); //!!!
DWORD Read(PVOID pvBuffer,DWORD dwCount);
DWORD Write(PACKED const PVOID pvBuffer,DWORD dwCount);
BOOL Truncate(DWORD dwNewSize); //!!!
protected:
BOOL WriteFlag();
BOOL ClearFlag();
protected:
IFileMgr* m_pFileMgr;
IFile* m_pFile;
BOOL m_bSafeMode;
OpenFileMode m_OpenMode;
};
typedef SafeFile* PSafeFile;
/*!
@ingroup IO
@brief 该类提供了自动序列化功能
*/
class SerialObj:public BREWObj
{
public:
SerialObj();
virtual ~SerialObj();
BOOL Serialize(BOOL bLoading);
static BOOL PrepareFile(IShell* pShell,WORD wObjCount,DWORD dwDataSize);
virtual void OnSerialize(PSafeFile pFile,BOOL bLoading);
public:
BOOL m_bDirty;
protected:
IShell* m_pShell;
DWORD m_dwID;
DWORD m_dwOffset;
};
typedef SerialObj* PSerialObj;
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -