]> git.saurik.com Git - wxWidgets.git/blobdiff - interface/wx/file.h
warn the user that for all basic classes wxPoint,wxRect,wxSize,wxRealPoint negative...
[wxWidgets.git] / interface / wx / file.h
index 93b5e600f4e5e4119f187730138c3f0e493536e0..30269c2e531caddc592b0a40eb1421df4212747a 100644 (file)
@@ -1,31 +1,62 @@
 /////////////////////////////////////////////////////////////////////////////
 // Name:        file.h
-// Purpose:     interface of wxTempFile
+// Purpose:     interface of wxTempFile, wxFile
 // Author:      wxWidgets team
 // RCS-ID:      $Id$
 // Licence:     wxWindows license
 /////////////////////////////////////////////////////////////////////////////
 
 
-//@{
 /**
-    These constants define the file access rights and are used with wxFile::Create and wxFile::Open.
+    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)
-//@}
+enum wxPosixPermissions
+{
+    /// standard Posix names for these permission flags
+    //@{
+    wxS_IRUSR = 00400,
+    wxS_IWUSR = 00200,
+    wxS_IXUSR = 00100,
+
+    wxS_IRGRP = 00040,
+    wxS_IWGRP = 00020,
+    wxS_IXGRP = 00010,
+
+    wxS_IROTH = 00004,
+    wxS_IWOTH = 00002,
+    wxS_IXOTH = 00001,
+    //@}
+
+    /// longer but more readable synonims for the constants above
+    //@{
+    wxPOSIX_USER_READ = wxS_IRUSR,
+    wxPOSIX_USER_WRITE = wxS_IWUSR,
+    wxPOSIX_USER_EXECUTE = wxS_IXUSR,
+
+    wxPOSIX_GROUP_READ = wxS_IRGRP,
+    wxPOSIX_GROUP_WRITE = wxS_IWGRP,
+    wxPOSIX_GROUP_EXECUTE = wxS_IXGRP,
+
+    wxPOSIX_OTHERS_READ = wxS_IROTH,
+    wxPOSIX_OTHERS_WRITE = wxS_IWOTH,
+    wxPOSIX_OTHERS_EXECUTE = wxS_IXOTH,
+    //@}
+
+    /// Default mode for the new files: allow reading/writing them to everybody but
+    /// the effective file mode will be set after ANDing this value with umask and
+    /// so won't include wxS_IW{GRP,OTH} for the default 022 umask value
+    wxS_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | \
+                   wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | \
+                   wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE),
+
+    /// Default mode for the new directories (see wxFileName::Mkdir): allow
+    /// reading/writing/executing them to everybody, but just like wxS_DEFAULT
+    /// the effective directory mode will be set after ANDing this value with umask
+    wxS_DIR_DEFAULT = (wxPOSIX_USER_READ | wxPOSIX_USER_WRITE | wxPOSIX_USER_EXECUTE | \
+                       wxPOSIX_GROUP_READ | wxPOSIX_GROUP_WRITE | wxPOSIX_GROUP_EXECUTE | \
+                       wxPOSIX_OTHERS_READ | wxPOSIX_OTHERS_WRITE | wxPOSIX_OTHERS_EXECUTE)
+};
 
 
 
     file by default, you should explicitly call wxTempFile::Commit() to do it.
     Calling wxTempFile::Discard() explicitly discards any modifications: it
     closes and deletes the temporary file and leaves the original file unchanged.
-    If you don't call neither of Commit() and Discard(), the destructor will
+    If you call neither Commit() nor Discard(), the destructor will
     call Discard() automatically.
 
     To summarize: if you want to replace another file, create an instance of
-    wxTempFile passing the name of the file to be replaced to the constructor
-    (you may also use default constructor and pass the file name to wxTempFile::Open).
+    wxTempFile passing the name of the file to be replaced to the constructor.
+    (You may also use default constructor and pass the file name to wxTempFile::Open.)
     Then you can write to wxTempFile using wxFile-like functions and later call
     wxTempFile::Commit() to replace the old file (and close this one) or call
     wxTempFile::Discard() to cancel the modifications.
@@ -71,12 +102,14 @@ class wxTempFile
 public:
     /**
         Associates wxTempFile with the file to be replaced and opens it.
-        You should use IsOpened() to verify if the constructor succeeded.
+
+        @warning
+        You should use IsOpened() to verify that the constructor succeeded.
     */
     wxTempFile(const wxString& strName);
 
     /**
-        Destructor calls Discard() if temporary file is still opened.
+        Destructor calls Discard() if temporary file is still open.
     */
     ~wxTempFile();
 
@@ -85,14 +118,14 @@ public:
         file to the old name. Returns @true if both actions succeeded.
 
         If @false is returned it may unfortunately mean two quite different things:
-        either that either the old file couldn't be deleted or that the new file
+        either that the old file couldn't be deleted or that the new file
         couldn't be renamed to the old name.
     */
     bool Commit();
 
     /**
-        Discard changes: the old file contents is not changed, temporary file is
-        deleted.
+        Discard changes: the old file contents are not changed, the temporary
+        file is deleted.
     */
     void Discard();
 
@@ -104,9 +137,8 @@ public:
     /**
         Returns the length of the file.
 
-        This method may return wxInvalidOffset if the length couldn't be
-        determined or also 0 even for non-empty files if the file is not
-        seekable.
+        This method may return ::wxInvalidOffset if the length couldn't be
+        determined or 0 even for non-empty files if the file is not seekable.
 
         In general, the only way to determine if the file for which this function
         returns 0 is really empty or not is to try reading from it.
@@ -130,7 +162,7 @@ public:
                       wxSeekMode mode = wxFromStart);
 
     /**
-        Returns the current position or wxInvalidOffset if file is not opened or
+        Returns the current position or ::wxInvalidOffset if file is not opened or
         if another error occurred.
     */
     wxFileOffset Tell() const;
@@ -149,20 +181,11 @@ public:
 /**
     @class wxFile
 
-    A wxFile performs raw file I/O.
-
-    This is a very small class designed to minimize the overhead of using it - in fact,
-    there is hardly any overhead at all, but using it brings you automatic error
-    checking and hides differences between platforms and compilers.
-
-    wxFile also automatically closes the file in its destructor making it unnecessary
-    to worry about forgetting to do it.
-
     A wxFile performs raw file I/O. This is a very small class designed to
     minimize the overhead of using it - in fact, there is hardly any overhead at
     all, but using it brings you automatic error checking and hides differences
     between platforms and compilers. wxFile also automatically closes the file in
-    its destructor making it unnecessary to worry about forgetting to do it.
+    its destructor so you won't forget to do so.
     wxFile is a wrapper around @c file descriptor. - see also wxFFile for a
     wrapper around @c FILE structure.
 
@@ -195,7 +218,7 @@ public:
         read_write,
 
         /** Open file for appending: the file is opened for writing, but the old contents
-            of the file is not erased and the file pointer is initially placed at the end
+            of the file are not erased and the file pointer is initially placed at the end
             of the file; can not be used with Access().
 
             This is the same as OpenMode::write if the file doesn't exist.
@@ -227,6 +250,9 @@ public:
             The filename.
         @param mode
             The mode in which to open the file.
+
+        @warning
+        You should use IsOpened() to verify that the constructor succeeded.
     */
     wxFile(const wxString& filename,
            wxFile::OpenMode mode = wxFile::read);
@@ -242,7 +268,7 @@ public:
 
     /**
         Destructor will close the file.
-        @note it is not virtual so you should not use wxFile polymorphically.
+        @note This destructor is not virtual so you should not use wxFile polymorphically.
     */
     ~wxFile();
 
@@ -254,7 +280,7 @@ public:
 
     /**
         Attaches an existing file descriptor to the wxFile object.
-        Example of predefined file descriptors are 0, 1 and 2 which correspond to
+        Examples of predefined file descriptors are 0, 1 and 2 which correspond to
         stdin, stdout and stderr (and have symbolic names of @c wxFile::fd_stdin,
         @c wxFile::fd_stdout and @c wxFile::fd_stderr).
 
@@ -266,7 +292,7 @@ public:
     /**
         Closes the file.
     */
-    void Close();
+    bool Close();
 
     /**
         Creates a file for writing.
@@ -274,8 +300,8 @@ public:
         If the file already exists, setting @b overwrite to @true will ensure
         it is overwritten.
 
-        @a access may be an OR combination of the file access values
-        like ::wxS_IRUSR, ::wxS_IWUSR, etc, etc.
+        @a access may be an OR combination of the ::wxPosixPermissions enumeration
+        values.
     */
     bool Create(const wxString& filename,
                 bool overwrite = false,
@@ -290,7 +316,7 @@ public:
 
     /**
         Returns @true if the end of the file has been reached.
-        Note that the behaviour of the file pointer based class wxFFile is
+        Note that the behaviour of the file pointer-based class wxFFile is
         different as wxFFile::Eof() will return @true here only if an
         attempt has been made to read @b past the last byte of the file, while
         wxFile::Eof() will return @true even before such attempt is made if the
@@ -298,7 +324,7 @@ public:
 
         Note also that this function doesn't work on unseekable file descriptors
         (examples include pipes, terminals and sockets under Unix) and an attempt to
-        use it will result in an error message in such case.
+        use it will result in an error message.
 
         So, to read the entire file into memory, you should write a loop which uses
         Read() repeatedly and tests its return condition instead of using Eof()
@@ -308,7 +334,7 @@ public:
 
     /**
         Returns @true if the given name specifies an existing regular file
-        (not a directory or a link)
+        (not a directory or a link).
     */
     static bool Exists(const wxString& filename);
 
@@ -343,9 +369,11 @@ public:
             The filename.
         @param mode
             The mode in which to open the file.
+        @param access
+            An OR-combination of ::wxPosixPermissions enumeration values.
     */
-    bool Open(const wxString& filename,
-              wxFile::OpenMode mode = wxFile::read);
+    bool Open(const wxString& filename, wxFile::OpenMode mode = wxFile::read,
+              int access = wxS_DEFAULT);
 
     /**
         Reads from the file into a memory buffer.
@@ -355,9 +383,9 @@ public:
         @param count
            Bytes to read
 
-        @return The number of bytes read, or the symbol wxInvalidOffset.
+        @return The number of bytes read, or the symbol ::wxInvalidOffset.
     */
-    size_t Read(void* buffer, size_t count);
+    ssize_t Read(void* buffer, size_t count);
 
     /**
         Seeks to the specified position.
@@ -367,7 +395,7 @@ public:
         @param mode
             One of wxFromStart, wxFromEnd, wxFromCurrent.
 
-        @return The actual offset position achieved, or wxInvalidOffset on
+        @return The actual offset position achieved, or ::wxInvalidOffset on
                 failure.
     */
     wxFileOffset Seek(wxFileOffset ofs,
@@ -381,13 +409,13 @@ public:
         @param ofs
             Number of bytes before the end of the file.
 
-        @return The actual offset position achieved, or wxInvalidOffset on
+        @return The actual offset position achieved, or ::wxInvalidOffset on
                 failure.
     */
     wxFileOffset SeekEnd(wxFileOffset ofs = 0);
 
     /**
-        Returns the current position or wxInvalidOffset if file is not opened or
+        Returns the current position or ::wxInvalidOffset if file is not opened or
         if another error occurred.
     */
     wxFileOffset Tell() const;