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 31 class WXDLLIMPEXP_BASE wxFileInputStream : public wxInputStream 32 { 33 public: 34 wxFileInputStream(const wxString& ifileName); 35 wxFileInputStream(wxFile& file); 36 wxFileInputStream(int fd); 37 virtual ~wxFileInputStream(); 38 39 wxFileOffset GetLength() const; 40 Ok()41 bool Ok() const { return IsOk(); } 42 virtual bool IsOk() const; IsSeekable()43 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 44 45 protected: 46 wxFileInputStream(); 47 48 size_t OnSysRead(void *buffer, size_t size); 49 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); 50 wxFileOffset OnSysTell() const; 51 52 protected: 53 wxFile *m_file; 54 bool m_file_destroy; 55 56 DECLARE_NO_COPY_CLASS(wxFileInputStream) 57 }; 58 59 class WXDLLIMPEXP_BASE wxFileOutputStream : public wxOutputStream 60 { 61 public: 62 wxFileOutputStream(const wxString& fileName); 63 wxFileOutputStream(wxFile& file); 64 wxFileOutputStream(int fd); 65 virtual ~wxFileOutputStream(); 66 67 void Sync(); Close()68 bool Close() { return m_file_destroy ? m_file->Close() : true; } 69 wxFileOffset GetLength() const; 70 Ok()71 bool Ok() const { return IsOk(); } 72 virtual bool IsOk() const; IsSeekable()73 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 74 75 protected: 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 82 protected: 83 wxFile *m_file; 84 bool m_file_destroy; 85 86 DECLARE_NO_COPY_CLASS(wxFileOutputStream) 87 }; 88 89 class WXDLLIMPEXP_BASE wxTempFileOutputStream : public wxOutputStream 90 { 91 public: 92 wxTempFileOutputStream(const wxString& fileName); 93 virtual ~wxTempFileOutputStream(); 94 Close()95 bool Close() { return Commit(); } Commit()96 virtual bool Commit() { return m_file->Commit(); } Discard()97 virtual void Discard() { m_file->Discard(); } 98 GetLength()99 wxFileOffset GetLength() const { return m_file->Length(); } IsSeekable()100 bool IsSeekable() const { return true; } 101 102 protected: 103 size_t OnSysWrite(const void *buffer, size_t size); OnSysSeek(wxFileOffset pos,wxSeekMode mode)104 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode) 105 { return m_file->Seek(pos, mode); } OnSysTell()106 wxFileOffset OnSysTell() const { return m_file->Tell(); } 107 108 private: 109 wxTempFile *m_file; 110 111 DECLARE_NO_COPY_CLASS(wxTempFileOutputStream) 112 }; 113 114 class WXDLLIMPEXP_BASE wxFileStream : public wxFileInputStream, 115 public wxFileOutputStream 116 { 117 public: 118 wxFileStream(const wxString& fileName); 119 120 private: 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 132 class WXDLLIMPEXP_BASE wxFFileInputStream : public wxInputStream 133 { 134 public: 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 Ok()142 bool Ok() const { return IsOk(); } 143 virtual bool IsOk() const; IsSeekable()144 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 145 146 protected: 147 wxFFileInputStream(); 148 149 size_t OnSysRead(void *buffer, size_t size); 150 wxFileOffset OnSysSeek(wxFileOffset pos, wxSeekMode mode); 151 wxFileOffset OnSysTell() const; 152 153 protected: 154 wxFFile *m_file; 155 bool m_file_destroy; 156 157 DECLARE_NO_COPY_CLASS(wxFFileInputStream) 158 }; 159 160 class WXDLLIMPEXP_BASE wxFFileOutputStream : public wxOutputStream 161 { 162 public: 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(); Close()169 bool Close() { return m_file_destroy ? m_file->Close() : true; } 170 wxFileOffset GetLength() const; 171 Ok()172 bool Ok() const { return IsOk(); } 173 virtual bool IsOk() const ; IsSeekable()174 bool IsSeekable() const { return m_file->GetKind() == wxFILE_KIND_DISK; } 175 176 protected: 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 183 protected: 184 wxFFile *m_file; 185 bool m_file_destroy; 186 187 DECLARE_NO_COPY_CLASS(wxFFileOutputStream) 188 }; 189 190 class WXDLLIMPEXP_BASE wxFFileStream : public wxFFileInputStream, 191 public wxFFileOutputStream 192 { 193 public: 194 wxFFileStream(const wxString& fileName); 195 196 private: 197 DECLARE_NO_COPY_CLASS(wxFFileStream) 198 }; 199 200 #endif //wxUSE_FFILE 201 202 #endif // wxUSE_STREAMS 203 204 #endif // _WX_WXFSTREAM_H__ 205