#pragma once namespace NFile { class CFileEx { public: CFileEx(CFile* pFile); virtual ~CFileEx(void); virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags); virtual void Close(); virtual UINT ReadString(char* pBuffer, UINT nMaxSize); //读取一行字符串 virtual UINT GetString(char* pBuffer, UINT nMaxSize); //读取一段字符串(以空格或回车为终止符) virtual UINT Read(void *buffer, UINT nCount); virtual void Write(const void *buffer, UINT nCount); virtual void Flush(); //SEEK_SET //开始 //SEEK_CUR //当前 //SEEK_END //结束 virtual ULONGLONG Seek(LONGLONG offset, UINT origin); virtual void SeekToBegin( ); virtual void SeekToEnd( ); virtual ULONGLONG GetPosition(); virtual ULONGLONG GetLength(); virtual BOOL IsEof(); virtual CString GetFileName(); protected: BOOL m_bCloseFile; CFile* m_pFile; }; //读取内存串数据 class CMemFileEx : public CFileEx { public: CMemFileBase(void); CMemFileBase(BYTE* pBuffer, DWORD nSize); virtual ~CMemFileBase(void); virtual BOOL Open(void); //自动申请内存 virtual BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags); //没有使用 virtual void Close(); virtual UINT Read(void *buffer, UINT nCount); virtual UINT Write(const void *buffer, UINT nCount); virtual void Flush(); virtual BOOL Seek(long offset, int origin); virtual void SeekToBegin( ); virtual void SeekToEnd( ); virtual long GetPosition(); virtual long GetLength(); virtual BOOL IsEof(); virtual CString GetFileName(); void SetBuffer(BYTE* pBuffer, UINT nSize); BYTE* GetBuffer(BOOL bDetachBuffer); protected: void Alloc(DWORD nBytes); BYTE* m_pBuffer; UINT m_nSize; BOOL m_bFreeOnClose; long m_Position; //current position }; //利用文件映射打开文件 class CMapFileBase : public CMemFileBase { public: CMapFileBase(void); virtual ~CMapFileBase(void); }; }; using namespace NFile;