#include "wx/datetime.h"
#include "wx/intl.h"
#include "wx/longlong.h"
+#include "wx/file.h"
#if wxUSE_FILE
class WXDLLIMPEXP_FWD_BASE wxFile;
class WXDLLIMPEXP_FWD_BASE wxFFile;
#endif
+// this symbol is defined for the platforms where file systems use volumes in
+// paths
+#if defined(__WINDOWS__) || defined(__DOS__) || defined(__OS2__)
+ #define wxHAS_FILESYSTEM_VOLUMES
+#endif
+
// ----------------------------------------------------------------------------
// constants
// ----------------------------------------------------------------------------
wxPATH_MAX // Not a valid value for specifying path format
};
+// different conventions that may be used with GetHumanReadableSize()
+enum wxSizeConvention
+{
+ wxSIZE_CONV_TRADITIONAL, // 1024 bytes = 1 KB
+ wxSIZE_CONV_IEC, // 1024 bytes = 1 KiB
+ wxSIZE_CONV_SI // 1000 bytes = 1 KB
+};
+
// the kind of normalization to do with the file name: these values can be
// or'd together to perform several operations at once
enum wxPathNormalize
{
wxPATH_NORM_ENV_VARS = 0x0001, // replace env vars with their values
- wxPATH_NORM_DOTS = 0x0002, // squeeze all .. and . and prepend cwd
+ wxPATH_NORM_DOTS = 0x0002, // squeeze all .. and .
wxPATH_NORM_TILDE = 0x0004, // Unix only: replace ~ and ~user
wxPATH_NORM_CASE = 0x0008, // if case insensitive => tolower
wxPATH_NORM_ABSOLUTE = 0x0010, // make the path absolute
// 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 WXDLLIMPEXP_DATA_BASE(const wxULongLong) wxInvalidSize;
// 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; }
!m_ext.empty() || m_hasExt;
}
- // does the file with this name exists?
+ // does the file with this name exist?
bool FileExists() const;
static bool FileExists( const wxString &file );
- // does the directory with this name exists?
+ // does the directory with this name exist?
bool DirExists() const;
static bool DirExists( const wxString &dir );
+ // does anything at all with this name (i.e. file, directory or some
+ // other file system object such as a device, socket, ...) exist?
+ bool Exists() const { return Exists(GetFullPath()); }
+ static bool Exists(const wxString& path);
+
+
// checks on most common flags for files/directories;
// more platform-specific features (like e.g. Unix permissions) are not
// available in wxFileName
// (any of the pointers may be NULL)
bool SetTimes(const wxDateTime *dtAccess,
const wxDateTime *dtMod,
- const wxDateTime *dtCreate);
+ const wxDateTime *dtCreate) const;
// set the access and modification times to the current moment
- bool Touch();
+ bool Touch() const;
// return the last access, last modification and create times
// (any of the pointers may be NULL)
#if defined( __WXOSX_MAC__ ) && wxOSX_USE_CARBON
bool MacSetTypeAndCreator( wxUint32 type , wxUint32 creator ) ;
- bool MacGetTypeAndCreator( wxUint32 *type , wxUint32 *creator ) ;
+ bool MacGetTypeAndCreator( wxUint32 *type , wxUint32 *creator ) const;
// gets the 'common' type and creator for a certain extension
static bool MacFindDefaultTypeAndCreator( const wxString& ext , wxUint32 *type , wxUint32 *creator ) ;
// registers application defined extensions and their default type and creator
static wxString GetCwd(const wxString& volume = wxEmptyString);
// change the current working directory
- bool SetCwd();
+ bool SetCwd() const;
static bool SetCwd( const wxString &cwd );
// get the value of user home (Unix only mainly)
#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) const;
+ 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) const;
+ static bool Rmdir(const wxString &dir, int flags = 0);
// operations on the path
// the arguments
bool GetShortcutTarget(const wxString& shortcutPath,
wxString& targetFilename,
- wxString* arguments = NULL);
+ wxString* arguments = NULL) const;
+#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
// is the char a path separator for this format?
static bool IsPathSeparator(wxChar ch, wxPathFormat format = wxPATH_NATIVE);
+ // is this is a DOS path which beings with a windows unique volume name
+ // ('\\?\Volume{guid}\')?
+ static bool IsMSWUniqueVolumeNamePath(const wxString& path,
+ wxPathFormat format = wxPATH_NATIVE);
+
// Dir accessors
size_t GetDirCount() const { return m_dirs.size(); }
void AppendDir(const wxString& dir);
wxString *path,
wxPathFormat format = wxPATH_NATIVE);
- // Filesize
+ // strip the file extension: "foo.bar" => "foo" (but ".baz" => ".baz")
+ static wxString StripExtension(const wxString& fullpath);
+
+#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
static wxULongLong GetSize(const wxString &file);
// returns the size in a human readable form
- wxString GetHumanReadableSize(const wxString &nullsize = wxGetTranslation(_T("Not available")),
- int precision = 1) const;
- static wxString GetHumanReadableSize(const wxULongLong &sz,
- const wxString &nullsize = wxGetTranslation(_T("Not available")),
- int precision = 1);
+ wxString
+ GetHumanReadableSize(const wxString& nullsize = _("Not available"),
+ int precision = 1,
+ wxSizeConvention conv = wxSIZE_CONV_TRADITIONAL) const;
+ static wxString
+ GetHumanReadableSize(const wxULongLong& sz,
+ const wxString& nullsize = _("Not available"),
+ int precision = 1,
+ wxSizeConvention conv = wxSIZE_CONV_TRADITIONAL);
#endif // wxUSE_LONGLONG