CxFile






4.50/5 (4投票s)
2002年5月16日
2分钟阅读

102399

1049
同一对象内的磁盘和内存文件。
引言
CxFile
是一个 C++ 类,用于在同一个对象中管理磁盘和内存文件。它使用标准的 C 运行时函数(没有 Windows API 或 MFC 类),因此很容易理解其工作原理。添加新的存储类型也很简单。
函数原理
CxFile
具有一个受保护的成员变量 void *m_stream
,它可以是 FILE*
或 BYTE*
。指针的类型存储在一个 m_StorageType
变量中,仅在对象生命周期内分配一次。
通用方法的结构是
long CxFile::GenericMethod() { if (m_stream==NULL) return -1; switch(m_StorageType){ case 0: //operations for FILE* handling case 1: //operations for BYTE* handling } return -1; }
对于磁盘文件处理,CxFile
作为流 I/O 例程的包装器。对于内存文件处理,需要一些额外的变量:m_Position
、m_Size
、m_Edge
;分别表示文件指针的位置、文件的大小和内存缓冲区的大小。每个成员都必须处理这些变量以确保数据的可靠性,Read
和 Write
方法在这方面最为关键。
构造函数
该类提供了 3 个构造函数。
CxFile(long type)
初始化对象以用于磁盘文件(type=0)或内存文件(type=1),m_stream
为NULL
,因此必须调用Open
来创建文件。CxFile(FILE* pFile)
将对象附加到打开的文件。CxFile(BYTE* pBuffer, DWORD size)
将对象附加到现有的内存缓冲区。
第一个构造函数与其他两个构造函数的主要区别在于,第一个构造函数会在析构函数中关闭/释放 m_stream
,而其他构造函数即使在显式调用 Close()
时也不会释放 m_stream
。
成员函数
void* Open(const char *filename, const char *mode)
long Close()
size_t Read(void *buffer, size_t size, size_t count)
size_t Write(const void *buffer, size_t size, size_t count)
long Flush()
long Seek(long offset, int origin)
long Tell()
long Size()
long GetPos(fpos_t *pos)
long Eof()
long Error()
long PutC(unsigned char c);
long GetC();
void* GetStream()
void* Alloc(DWORD nBytes)
void Free();
void Transfer(CxFile &from)