2. more file operations:
a) chmod()
b) [acm]time() - get and set
- c) file permissions with readable accessors for most common bits
- such as IsReadable() &c
- d) rename()?
+ c) rename()?
3. SameFileAs() function to compare inodes under Unix
*/
#include "wx/filefn.h"
#include "wx/datetime.h"
#include "wx/intl.h"
+#include "wx/longlong.h"
+#include "wx/file.h"
#if wxUSE_FILE
-class WXDLLIMPEXP_BASE wxFile;
+class WXDLLIMPEXP_FWD_BASE wxFile;
+#endif
+
+#if wxUSE_FFILE
+class WXDLLIMPEXP_FWD_BASE wxFFile;
+#endif
+
+// this symbol is defined for the platforms where file systems use volumes in
+// paths
+#if defined(__WXMSW__) || defined(__DOS__) || defined(__OS2__)
+ #define wxHAS_FILESYSTEM_VOLUMES
#endif
// ----------------------------------------------------------------------------
// what exactly should GetPath() return?
enum
{
+ wxPATH_NO_SEPARATOR = 0x0000, // for symmetry with wxPATH_GET_SEPARATOR
wxPATH_GET_VOLUME = 0x0001, // include the volume if applicable
wxPATH_GET_SEPARATOR = 0x0002 // terminate the path with the separator
};
-// MkDir flags
+// Mkdir flags
enum
{
wxPATH_MKDIR_FULL = 0x0001 // create directories recursively
};
+// Rmdir flags
+enum
+{
+ wxPATH_RMDIR_FULL = 0x0001, // delete with subdirectories if empty
+ wxPATH_RMDIR_RECURSIVE = 0x0002 // delete all recursively (dangerous!)
+};
+
+#if wxUSE_LONGLONG
// error code of wxFileName::GetSize()
-extern wxULongLong wxInvalidSize;
+extern WXDLLIMPEXP_DATA_BASE(const wxULongLong) wxInvalidSize;
+#endif // wxUSE_LONGLONG
+
// ----------------------------------------------------------------------------
// assorted assignment operators
wxFileName& operator=(const wxFileName& filename)
- { Assign(filename); return *this; }
+ { if (this != &filename) Assign(filename); return *this; }
wxFileName& operator=(const wxString& filename)
{ Assign(filename); return *this; }
bool DirExists() const;
static bool DirExists( const wxString &dir );
- // VZ: also need: IsDirWritable(), IsFileExecutable() &c (TODO)
+ // checks on most common flags for files/directories;
+ // more platform-specific features (like e.g. Unix permissions) are not
+ // available in wxFileName
+
+ bool IsDirWritable() const { return wxIsWritable(GetPath()); }
+ static bool IsDirWritable(const wxString &path) { return wxDirExists(path) && wxIsWritable(path); }
+
+ bool IsDirReadable() const { return wxIsReadable(GetPath()); }
+ static bool IsDirReadable(const wxString &path) { return wxDirExists(path) && wxIsReadable(path); }
+
+ // NOTE: IsDirExecutable() is not present because the meaning of "executable"
+ // directory is very platform-dependent and also not so useful
+
+ bool IsFileWritable() const { return wxIsWritable(GetFullPath()); }
+ static bool IsFileWritable(const wxString &path) { return wxFileExists(path) && wxIsWritable(path); }
+
+ bool IsFileReadable() const { return wxIsReadable(GetFullPath()); }
+ static bool IsFileReadable(const wxString &path) { return wxFileExists(path) && wxIsReadable(path); }
+
+ bool IsFileExecutable() const { return wxIsExecutable(GetFullPath()); }
+ static bool IsFileExecutable(const wxString &path) { return wxFileExists(path) && wxIsExecutable(path); }
+
// time functions
#if wxUSE_DATETIME
}
#endif // wxUSE_DATETIME
-#ifdef __WXMAC__
+#if defined( __WXOSX_MAC__ ) && wxOSX_USE_CARBON
bool MacSetTypeAndCreator( wxUint32 type , wxUint32 creator ) ;
bool MacGetTypeAndCreator( wxUint32 *type , wxUint32 *creator ) ;
// gets the 'common' type and creator for a certain extension
void AssignHomeDir();
static wxString GetHomeDir();
+ // get the system temporary directory
+ static wxString GetTempDir();
+
+#if wxUSE_FILE || wxUSE_FFILE
+ // get a temp file name starting with the specified prefix
+ void AssignTempFileName(const wxString& prefix);
+ static wxString CreateTempFileName(const wxString& prefix);
+#endif // wxUSE_FILE
+
#if wxUSE_FILE
// get a temp file name starting with the specified prefix and open the
// file passed to us using this name for writing (atomically if
// possible)
- void AssignTempFileName(const wxString& prefix, wxFile *fileTemp = NULL);
+ void AssignTempFileName(const wxString& prefix, wxFile *fileTemp);
static wxString CreateTempFileName(const wxString& prefix,
- wxFile *fileTemp = NULL);
+ wxFile *fileTemp);
#endif // wxUSE_FILE
+#if wxUSE_FFILE
+ // get a temp file name starting with the specified prefix and open the
+ // file passed to us using this name for writing (atomically if
+ // possible)
+ void AssignTempFileName(const wxString& prefix, wxFFile *fileTemp);
+ static wxString CreateTempFileName(const wxString& prefix,
+ wxFFile *fileTemp);
+#endif // wxUSE_FFILE
+
// directory creation and removal.
- bool Mkdir( int perm = 0777, int flags = 0);
- static bool Mkdir( const wxString &dir, int perm = 0777, int flags = 0 );
+ bool Mkdir(int perm = wxS_DIR_DEFAULT, int flags = 0);
+ static bool Mkdir(const wxString &dir, int perm = wxS_DIR_DEFAULT,
+ int flags = 0);
- bool Rmdir();
- static bool Rmdir( const wxString &dir );
+ bool Rmdir(int flags = 0);
+ static bool Rmdir(const wxString &dir, int flags = 0);
// operations on the path
wxString* arguments = NULL);
#endif
+#ifndef __WXWINCE__
+ // if the path contains the value of the environment variable named envname
+ // then this function replaces it with the string obtained from
+ // wxString::Format(replacementFmtString, value_of_envname_variable)
+ //
+ // Example:
+ // wxFileName fn("/usr/openwin/lib/someFile");
+ // fn.ReplaceEnvVariable("OPENWINHOME");
+ // // now fn.GetFullPath() == "$OPENWINHOME/lib/someFile"
+ bool ReplaceEnvVariable(const wxString& envname,
+ const wxString& replacementFmtString = "$%s",
+ wxPathFormat format = wxPATH_NATIVE);
+#endif
+
+ // replaces, if present in the path, the home directory for the given user
+ // (see wxGetHomeDir) with a tilde
+ bool ReplaceHomeDir(wxPathFormat format = wxPATH_NATIVE);
+
+
// Comparison
// compares with the rules of the given platforms format
static wxString GetPathTerminators(wxPathFormat format = wxPATH_NATIVE);
// get the canonical path separator for this format
- static wxChar GetPathSeparator(wxPathFormat format = wxPATH_NATIVE)
+ static wxUniChar GetPathSeparator(wxPathFormat format = wxPATH_NATIVE)
{ return GetPathSeparators(format)[0u]; }
// is the char a path separator for this format?
wxString *path,
wxPathFormat format = wxPATH_NATIVE);
- // Filesize
+#ifdef wxHAS_FILESYSTEM_VOLUMES
+ // return the string representing a file system volume, or drive
+ static wxString GetVolumeString(char drive, int flags = wxPATH_GET_SEPARATOR);
+#endif // wxHAS_FILESYSTEM_VOLUMES
+
+ // File size
+#if wxUSE_LONGLONG
// returns the size of the given filename
wxULongLong GetSize() const;
static wxULongLong GetSize(const wxString &file);
static wxString GetHumanReadableSize(const wxULongLong &sz,
const wxString &nullsize = wxGetTranslation(_T("Not available")),
int precision = 1);
+#endif // wxUSE_LONGLONG
// deprecated methods, don't use any more