#pragma once #include "memstrm.h" class FileStream : public MemoryStream { public: FileStream(const char* file_name = NULL, Logical writable = false); ~FileStream() { Close(); } public: void* GetPointer() const { Fail("No implementation possible for FileStream::GetPointer()"); return NULL; } void SetPointer(void *new_pointer) { Fail("No implementation possible for FileStream::SetPointer(void*)"); } void SetPointer(size_t index); MemoryStream& AdvancePointer(size_t count); MemoryStream& RewindPointer(size_t count); MemoryStream& ReadBytes(void *ptr, size_t number_of_bytes); MemoryStream& WriteBytes(const void *ptr, size_t number_of_bytes); void Open(const char* file_name = NULL, Logical writable = False); void Close(); Logical IsFileOpened() { return fileHandle != -1; } Logical TestInstance() const; protected: int fileHandle; Logical readOnly; static int OpenImplementation(const char* file_name, Logical read_only); static void FlushImplementation(int file_handle); static void CloseImplementation(int file_handle); static size_t SeekImplementation(int file_handle, size_t where, Logical from_end = false); static size_t ReadImplementation(int file_handle, void *buffer, size_t length); static size_t WriteImplementation(int file_handle, const void* buffer, size_t length); };