X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9508a23a1ba41b9ff7928982dd48d53d21b12c4e..66c2bf7b1d9326fb650acfaae22ec50528cfbf7c:/include/wx/file.h?ds=sidebyside diff --git a/include/wx/file.h b/include/wx/file.h index f630f831f5..b2cd59eab0 100644 --- a/include/wx/file.h +++ b/include/wx/file.h @@ -1,11 +1,10 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: file.h +// Name: wx/file.h // Purpose: wxFile - encapsulates low-level "file descriptor" // wxTempFile - safely replace the old file // Author: Vadim Zeitlin // Modified by: // Created: 29/01/98 -// RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -19,7 +18,7 @@ #include "wx/string.h" #include "wx/filefn.h" -#include "wx/strconv.h" +#include "wx/convauto.h" // ---------------------------------------------------------------------------- // class wxFile: raw file IO @@ -49,11 +48,11 @@ public: // ctors // ----- // def ctor - wxFile() { m_fd = fd_invalid; m_error = false; } + wxFile() { m_fd = fd_invalid; m_lasterror = 0; } // open specified file (may fail, use IsOpened()) wxFile(const wxString& fileName, OpenMode mode = read); // attach to (already opened) file - wxFile(int lfd) { m_fd = lfd; m_error = false; } + wxFile(int lfd) { m_fd = lfd; m_lasterror = 0; } // open/close // create a new file (with the default value of bOverwrite, it will fail if @@ -65,17 +64,19 @@ public: bool Close(); // Close is a NOP if not opened // assign an existing file descriptor and get it back from wxFile object - void Attach(int lfd) { Close(); m_fd = lfd; m_error = false; } + void Attach(int lfd) { Close(); m_fd = lfd; m_lasterror = 0; } void Detach() { m_fd = fd_invalid; } int fd() const { return m_fd; } // read/write (unbuffered) + // read all data from the file into a string (useful for text files) + bool ReadAll(wxString *str, const wxMBConv& conv = wxConvAuto()); // returns number of bytes read or wxInvalidOffset on error ssize_t Read(void *pBuf, size_t nCount); // returns the number of bytes written size_t Write(const void *pBuf, size_t nCount); // returns true on success - bool Write(const wxString& s, const wxMBConv& conv = wxMBConvUTF8()); + bool Write(const wxString& s, const wxMBConv& conv = wxConvAuto()); // flush data not yet written bool Flush(); @@ -95,10 +96,15 @@ public: // is end of file reached? bool Eof() const; // has an error occurred? - bool Error() const { return m_error; } + bool Error() const { return m_lasterror != 0; } + // get last errno + int GetLastError() const { return m_lasterror; } + // reset error state + void ClearLastError() { m_lasterror = 0; } // type such as disk or pipe wxFileKind GetKind() const { return wxGetFileKind(m_fd); } + // dtor closes the file if opened ~wxFile() { Close(); } @@ -109,8 +115,16 @@ private: wxFile(const wxFile&); wxFile& operator=(const wxFile&); + // Copy the value of errno into m_lasterror if rc == -1 and return true in + // this case (indicating that we've got an error). Otherwise return false. + // + // Notice that we use the possibly 64 bit wxFileOffset instead of int here so + // that it works for checking the result of functions such as tell() too. + bool CheckForError(wxFileOffset rc) const; + + int m_fd; // file descriptor or INVALID_FD if not opened - bool m_error; // error memory + int m_lasterror; // errno value of last error }; // ----------------------------------------------------------------------------