65.9K
CodeProject 正在变化。 阅读更多。
Home

CxFile

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.50/5 (4投票s)

2002年5月16日

2分钟阅读

viewsIcon

102399

downloadIcon

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_Positionm_Sizem_Edge;分别表示文件指针的位置、文件的大小和内存缓冲区的大小。每个成员都必须处理这些变量以确保数据的可靠性,ReadWrite 方法在这方面最为关键。

构造函数

该类提供了 3 个构造函数。

  • CxFile(long type) 初始化对象以用于磁盘文件(type=0)或内存文件(type=1),m_streamNULL,因此必须调用 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)
© . All rights reserved.