You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
1.8 KiB
C++

#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;