X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/79c3e0e1aeebb64da2ac893e6ed7b27edca01a64..eba0e4d417e4a57204abd04daa22919d4e2d5053:/include/wx/file.h diff --git a/include/wx/file.h b/include/wx/file.h index e3f8ab1fc3..038b578e33 100644 --- a/include/wx/file.h +++ b/include/wx/file.h @@ -7,7 +7,7 @@ // Created: 29/01/98 // RCS-ID: $Id$ // Copyright: (c) 1998 Vadim Zeitlin -// Licence: wxWindows license +// Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// #ifndef __FILEH__ @@ -17,27 +17,32 @@ #pragma interface "file.h" #endif -// ---------------------------------------------------------------------------- -// simple types -// ---------------------------------------------------------------------------- - -#include "wx/string.h" -#include "wx/filefn.h" -#include "wx/stream.h" // for wxSeekMode - -// define off_t -#include - -#ifdef _MSC_VER - #define off_t _off_t +#ifndef WX_PRECOMP + #include "wx/string.h" + #include "wx/filefn.h" #endif // ---------------------------------------------------------------------------- // constants // ---------------------------------------------------------------------------- -// error return value for Seek() functions -const off_t ofsInvalid = (off_t)-1; +// we redefine these constants here because S_IREAD &c are _not_ standard +// however, we do assume that the values correspond to the Unix umask bits +#define wxS_IRUSR 00400 +#define wxS_IWUSR 00200 +#define wxS_IXUSR 00100 + +#define wxS_IRGRP 00040 +#define wxS_IWGRP 00020 +#define wxS_IXGRP 00010 + +#define wxS_IROTH 00004 +#define wxS_IWOTH 00002 +#define wxS_IXOTH 00001 + +// default mode for the new files: corresponds to umask 022 +#define wxS_DEFAULT (wxS_IRUSR | wxS_IWUSR | wxS_IRGRP | wxS_IWGRP |\ + wxS_IROTH | wxS_IWOTH) // ---------------------------------------------------------------------------- // class wxFile: raw file IO @@ -50,7 +55,6 @@ class WXDLLEXPORT wxFile public: // more file constants // ------------------- - // opening mode enum OpenMode { read, write, read_write, write_append }; // standard values for file descriptor @@ -58,21 +62,29 @@ public: // static functions // ---------------- - static bool Exists(const char *sz); // also checks it's a regular file + // check whether a regular file by this name exists + static bool Exists(const wxChar *name); + // check whetther we can access the given file in given mode + // (only read and write make sense here) + static bool Access(const wxChar *name, OpenMode mode); // ctors // ----- // def ctor wxFile() { m_fd = fd_invalid; } // open specified file (may fail, use IsOpened()) - wxFile(const char *szFileName, OpenMode mode = read); + wxFile(const wxChar *szFileName, OpenMode mode = read); // attach to (already opened) file wxFile(int fd) { m_fd = fd; } // open/close - bool Create(const char *szFileName, bool bOverwrite = FALSE); - bool Open(const char *szFileName, OpenMode mode = read); - inline bool Close(); // Close is a NOP if not opened + // create a new file (with the default value of bOverwrite, it will fail if + // the file already exists, otherwise it will overwrite it and succeed) + bool Create(const wxChar *szFileName, bool bOverwrite = FALSE, + int access = wxS_DEFAULT); + bool Open(const wxChar *szFileName, OpenMode mode = read, + int access = wxS_DEFAULT); + bool Close(); // Close is a NOP if not opened // assign an existing file descriptor and get it back from wxFile object void Attach(int fd) { Close(); m_fd = fd; } @@ -83,9 +95,9 @@ public: // returns number of bytes read or ofsInvalid on error off_t Read(void *pBuf, off_t nCount); // returns true on success - uint Write(const void *pBuf, uint nCount); + size_t Write(const void *pBuf, size_t nCount); // returns true on success - bool Write(const wxString& str) { return Write(str.c_str(), str.Len()); } + bool Write(const wxString& s) { return Write(s.c_str(), s.Len()*sizeof(wxChar)) != 0; } // flush data not yet written bool Flush(); @@ -106,9 +118,9 @@ public: bool Eof() const; // is an error occured? bool Error() const { return m_error; } - + // dtor closes the file if opened - ~wxFile(); + ~wxFile(); private: // copy ctor and assignment operator are private because @@ -128,7 +140,7 @@ private: // file (and close this one) or call Discard() to cancel the modification. If // you call neither of them, dtor will call Discard(). // ---------------------------------------------------------------------------- -class wxTempFile +class WXDLLEXPORT wxTempFile { public: // ctors @@ -144,8 +156,8 @@ public: bool IsOpened() const { return m_file.IsOpened(); } // I/O (both functions return true on success, false on failure) - bool Write(const void *p, uint n) { return m_file.Write(p, n); } - bool Write(const wxString& str) { return m_file.Write(str); } + bool Write(const void *p, size_t n) { return m_file.Write(p, n) != 0; } + bool Write(const wxString& str) { return m_file.Write(str); } // different ways to close the file // validate changes and delete the old file of name m_strName @@ -157,10 +169,14 @@ public: ~wxTempFile(); private: + // no copy ctor/assignment operator + wxTempFile(const wxTempFile&); + wxTempFile& operator=(const wxTempFile&); + wxString m_strName, // name of the file to replace in Commit() m_strTemp; // temporary file name wxFile m_file; // the temporary file }; #endif - // __FILEH__ + // _WX_FILEH__