1///////////////////////////////////////////////////////////////////////////// 2// Name: wx/wfstream.h 3// Purpose: File stream classes 4// Author: Guilhem Lavaux 5// Modified by: 6// Created: 11/07/98 7// RCS-ID: $Id: wfstream.h 61872 2009-09-09 22:37:05Z VZ $ 8// Copyright: (c) Guilhem Lavaux 9// Licence: wxWindows licence 10///////////////////////////////////////////////////////////////////////////// 11 12#ifndef _WX_WXFSTREAM_H__ 13#define _WX_WXFSTREAM_H__ 14 15#include "wx/defs.h" 16 17#if wxUSE_STREAMS 18 19#include "wx/object.h" 20#include "wx/string.h" 21#include "wx/stream.h" 22#include "wx/file.h" 23#include "wx/ffile.h" 24 25#if wxUSE_FILE 26 27// ---------------------------------------------------------------------------- 28// wxFileStream using wxFile 29// ---------------------------------------------------------------------------- 30 31class WXDLLIMPEXP_BASE wxFileInputStream : public wxInputStream 32{ 33public: 34 wxFileInputStream(const wxString& ifileName); 35 wxFileInputStream(wxFile& file); 36 wxFileInputStream(int fd); 37 virtual ~wxFileInputStream(); 38 39 wxFileOffset GetLength() const; 40 41 bool Ok() const { return IsOk(); } 42 virtual bool IsOk() const; 43 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 44 45protected: 46 wxFileInputStream(); 47 48 size_t OnSysRead(void *buffer, size_t size); 49 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); 50 wxFileOffset OnSysTell() const; 51 52protected: 53 wxFile *m_file; 54 bool m_file_destroy; 55 56 DECLARE_NO_COPY_CLASS(wxFileInputStream) 57}; 58 59class WXDLLIMPEXP_BASE wxFileOutputStream : public wxOutputStream 60{ 61public: 62 wxFileOutputStream(const wxString& fileName); 63 wxFileOutputStream(wxFile& file); 64 wxFileOutputStream(int fd); 65 virtual ~wxFileOutputStream(); 66 67 void Sync(); 68 bool Close() { return m_file_destroy ? m_file->Close() : true; } 69 wxFileOffset GetLength() const; 70 71 bool Ok() const { return IsOk(); } 72 virtual bool IsOk() const; 73 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 74 75protected: 76 wxFileOutputStream(); 77 78 size_t OnSysWrite(const void *buffer, size_t size); 79 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); 80 wxFileOffset OnSysTell() const; 81 82protected: 83 wxFile *m_file; 84 bool m_file_destroy; 85 86 DECLARE_NO_COPY_CLASS(wxFileOutputStream) 87}; 88 89class WXDLLIMPEXP_BASE wxTempFileOutputStream : public wxOutputStream 90{ 91public: 92 wxTempFileOutputStream(const wxString& fileName); 93 virtual ~wxTempFileOutputStream(); 94 95 bool Close() { return Commit(); } 96 virtual bool Commit() { return m_file->Commit(); } 97 virtual void Discard() { m_file->Discard(); } 98 99 wxFileOffset GetLength() const { return m_file->Length(); } 100 bool IsSeekable() const { return true; } 101 102protected: 103 size_t OnSysWrite(const void *buffer, size_t size); 104 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode) 105 { return m_file->Seek(pos, mode); } 106 wxFileOffset OnSysTell() const { return m_file->Tell(); } 107 108private: 109 wxTempFile *m_file; 110 111 DECLARE_NO_COPY_CLASS(wxTempFileOutputStream) 112}; 113 114class WXDLLIMPEXP_BASE wxFileStream : public wxFileInputStream, 115 public wxFileOutputStream 116{ 117public: 118 wxFileStream(const wxString& fileName); 119 120private: 121 DECLARE_NO_COPY_CLASS(wxFileStream) 122}; 123 124#endif //wxUSE_FILE 125 126#if wxUSE_FFILE 127 128// ---------------------------------------------------------------------------- 129// wxFFileStream using wxFFile 130// ---------------------------------------------------------------------------- 131 132class WXDLLIMPEXP_BASE wxFFileInputStream : public wxInputStream 133{ 134public: 135 wxFFileInputStream(const wxString& fileName, const wxChar *mode = wxT("rb")); 136 wxFFileInputStream(wxFFile& file); 137 wxFFileInputStream(FILE *file); 138 virtual ~wxFFileInputStream(); 139 140 wxFileOffset GetLength() const; 141 142 bool Ok() const { return IsOk(); } 143 virtual bool IsOk() const; 144 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 145 146protected: 147 wxFFileInputStream(); 148 149 size_t OnSysRead(void *buffer, size_t size); 150 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); 151 wxFileOffset OnSysTell() const; 152 153protected: 154 wxFFile *m_file; 155 bool m_file_destroy; 156 157 DECLARE_NO_COPY_CLASS(wxFFileInputStream) 158}; 159 160class WXDLLIMPEXP_BASE wxFFileOutputStream : public wxOutputStream 161{ 162public: 163 wxFFileOutputStream(const wxString& fileName, const wxChar *mode = wxT("w+b")); 164 wxFFileOutputStream(wxFFile& file); 165 wxFFileOutputStream(FILE *file); 166 virtual ~wxFFileOutputStream(); 167 168 void Sync(); 169 bool Close() { return m_file_destroy ? m_file->Close() : true; } 170 wxFileOffset GetLength() const; 171 172 bool Ok() const { return IsOk(); } 173 virtual bool IsOk() const ; 174 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 175 176protected: 177 wxFFileOutputStream(); 178 179 size_t OnSysWrite(const void *buffer, size_t size); 180 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); 181 wxFileOffset OnSysTell() const; 182 183protected: 184 wxFFile *m_file; 185 bool m_file_destroy; 186 187 DECLARE_NO_COPY_CLASS(wxFFileOutputStream) 188}; 189 190class WXDLLIMPEXP_BASE wxFFileStream : public wxFFileInputStream, 191 public wxFFileOutputStream 192{ 193public: 194 wxFFileStream(const wxString& fileName); 195 196private: 197 DECLARE_NO_COPY_CLASS(wxFFileStream) 198}; 199 200#endif //wxUSE_FFILE 201 202#endif // wxUSE_STREAMS 203 204#endif // _WX_WXFSTREAM_H__ 205