]>
git.saurik.com Git - wxWidgets.git/blob - include/wx/ffile.h
   1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     wxFFile - encapsulates "FILE *" stream 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  15 #include "wx/defs.h"        // for wxUSE_FFILE 
  19 #include  "wx/string.h" 
  20 #include  "wx/filefn.h" 
  21 #include  "wx/convauto.h" 
  25 // ---------------------------------------------------------------------------- 
  26 // class wxFFile: standard C stream library IO 
  28 // NB: for space efficiency this class has no virtual functions, including 
  29 //     dtor which is _not_ virtual, so it shouldn't be used as a base class. 
  30 // ---------------------------------------------------------------------------- 
  32 class WXDLLIMPEXP_BASE wxFFile
 
  38   wxFFile() { m_fp 
= NULL
; } 
  39     // open specified file (may fail, use IsOpened()) 
  40   wxFFile(const wxChar 
*filename
, const wxChar 
*mode 
= _T("r")); 
  41     // attach to (already opened) file 
  42   wxFFile(FILE *lfp
) { m_fp 
= lfp
; } 
  45     // open a file (existing or not - the mode controls what happens) 
  46   bool Open(const wxChar 
*filename
, const wxChar 
*mode 
= _T("r")); 
  47     // closes the opened file (this is a NOP if not opened) 
  50   // assign an existing file descriptor and get it back from wxFFile object 
  51   void Attach(FILE *lfp
, const wxString
& name 
= wxEmptyString
) 
  52     { Close(); m_fp 
= lfp
; m_name 
= name
; } 
  53   void Detach() { m_fp 
= NULL
; } 
  54   FILE *fp() const { return m_fp
; } 
  56   // read/write (unbuffered) 
  57     // read all data from the file into a string (useful for text files) 
  58   bool ReadAll(wxString 
*str
, const wxMBConv
& conv 
= wxConvAuto()); 
  59     // returns number of bytes read - use Eof() and Error() to see if an error 
  61   size_t Read(void *pBuf
, size_t nCount
); 
  62     // returns the number of bytes written 
  63   size_t Write(const void *pBuf
, size_t nCount
); 
  64     // returns true on success 
  65   bool Write(const wxString
& s
, const wxMBConv
& conv 
= wxConvAuto()) 
  67       const wxWX2MBbuf buf 
= s
.mb_str(conv
); 
  68       size_t size 
= strlen(buf
); 
  69       return Write((const char *)buf
, size
) == size
; 
  71     // flush data not yet written 
  74   // file pointer operations (return ofsInvalid on failure) 
  75     // move ptr ofs bytes related to start/current pos/end of file 
  76   bool Seek(wxFileOffset ofs
, wxSeekMode mode 
= wxFromStart
); 
  77     // move ptr to ofs bytes before the end 
  78   bool SeekEnd(wxFileOffset ofs 
= 0) { return Seek(ofs
, wxFromEnd
); } 
  79     // get current position in the file 
  80   wxFileOffset 
Tell() const; 
  81     // get current file length 
  82   wxFileOffset 
Length() const; 
  84   // simple accessors: note that Eof() and Error() may only be called if 
  87   bool IsOpened() const { return m_fp 
!= NULL
; } 
  88     // is end of file reached? 
  89   bool Eof() const { return feof(m_fp
) != 0; } 
  90     // has an error occurred? 
  91   bool Error() const { return ferror(m_fp
) != 0; } 
  93   const wxString
& GetName() const { return m_name
; } 
  94     // type such as disk or pipe 
  95   wxFileKind 
GetKind() const { return wxGetFileKind(m_fp
); } 
  97   // dtor closes the file if opened 
  98   ~wxFFile() { Close(); } 
 101   // copy ctor and assignment operator are private because it doesn't make 
 102   // sense to copy files this way: attempt to do it will provoke a compile-time 
 104   wxFFile(const wxFFile
&); 
 105   wxFFile
& operator=(const wxFFile
&); 
 107   FILE *m_fp
;       // IO stream or NULL if not opened 
 109   wxString m_name
;  // the name of the file (for diagnostic messages) 
 112 #endif // wxUSE_FFILE 
 114 #endif // _WX_FFILE_H_