#ifndef __FILE_CLASS__H__ #define __FILE_CLASS__H__ class CFileBase { public: enum OpenFlags { modeRead = 0x0000, modeWrite = 0x0001, modeReadWrite = 0x0002, shareCompat = 0x0000, shareExclusive = 0x0010, shareDenyWrite = 0x0020, shareDenyRead = 0x0030, shareDenyNone = 0x0040, modeNoInherit = 0x0080, modeCreate = 0x1000, modeNoTruncate = 0x2000, }; enum Attribute { normal = 0x00, readOnly = 0x01, hidden = 0x02, system = 0x04, volume = 0x08, directory = 0x10, archive = 0x20 }; enum SeekPosition { begin = 0x0, current = 0x1, end = 0x2 }; virtual bool Open(LPCTSTR lpszFileName, ULONG nOpenFlags ) = 0; virtual ULONG GetPosition() const = 0; virtual long Seek(long lOff, SeekPosition nFrom) = 0; virtual bool SetLength(ULONG dwNewLen) = 0; virtual ULONG GetLength() const = 0; virtual ULONG Read(void* lpBuf, ULONG nCount) = 0; virtual bool Write(const void* lpBuf, ULONG nCount) = 0; virtual bool Flush() = 0; virtual bool Close() = 0; virtual bool IsOpen() const = 0; virtual bool SetEndOfFile() = 0; }; class CFile : public CFileBase { // Attributes HANDLE m_hFile; bool m_bCloseOnDelete; public: // Flag values // Constructors CFile(); CFile(HANDLE hFile); CFile(LPCTSTR lpszFileName, ULONG nOpenFlags); // Deconstructors virtual ~CFile(); // Operations virtual bool Open(LPCTSTR lpszFileName, ULONG nOpenFlags ); ULONG SeekToEnd ( void ); void SeekToBegin ( void ); // Overridables virtual ULONG GetPosition() const; virtual long Seek(long lOff, SeekPosition nFrom); virtual bool SetLength(ULONG dwNewLen); virtual ULONG GetLength() const; virtual ULONG Read(void* lpBuf, ULONG nCount); virtual bool Write(const void* lpBuf, ULONG nCount); virtual bool Flush(); virtual bool Close(); virtual bool IsOpen() const; virtual bool SetEndOfFile(); }; #endif