X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a44f3b5a890fbb2a88ef9adafd94f662e1664889..6aea1e4a7067d8e7cbac03833b64a363baefcb16:/interface/wx/filename.h?ds=sidebyside diff --git a/interface/wx/filename.h b/interface/wx/filename.h index 4917fecce9..72bf9273e8 100644 --- a/interface/wx/filename.h +++ b/interface/wx/filename.h @@ -7,7 +7,8 @@ ///////////////////////////////////////////////////////////////////////////// -/** The various values for the path format: this mainly affects the path +/** + The various values for the path format: this mainly affects the path separator but also whether or not the path has the drive part (as under Windows). @@ -28,22 +29,48 @@ enum wxPathFormat }; -/** The kind of normalization to do with the file name: these values can be +/** + The kind of normalization to do with the file name: these values can be or'd together to perform several operations at once. See wxFileName::Normalize() for more info. */ 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_TILDE = 0x0004, //!< Unix only: replace ~ and ~user. - wxPATH_NORM_CASE = 0x0008, //!< if case insensitive => tolower. - wxPATH_NORM_ABSOLUTE = 0x0010, //!< make the path absolute. - wxPATH_NORM_LONG = 0x0020, //!< make the path the long form. - wxPATH_NORM_SHORTCUT = 0x0040, //!< resolve the shortcut, if it is a shortcut. + //! Replace environment variables with their values. + //! wxFileName understands both Unix and Windows (but only under Windows) environment + //! variables expansion: i.e. @c "$var", @c "$(var)" and @c "${var}" are always understood + //! and in addition under Windows @c "%var%" is also. + wxPATH_NORM_ENV_VARS = 0x0001, + + wxPATH_NORM_DOTS = 0x0002, //!< Squeeze all @c ".." and @c "." and prepend the current working directory. + wxPATH_NORM_TILDE = 0x0004, //!< Replace @c "~" and @c "~user" (Unix only). + wxPATH_NORM_CASE = 0x0008, //!< If the platform is case insensitive, make lowercase the path. + wxPATH_NORM_ABSOLUTE = 0x0010, //!< Make the path absolute. + wxPATH_NORM_LONG = 0x0020, //!< Expand the path to the "long" form (Windows only). + wxPATH_NORM_SHORTCUT = 0x0040, //!< Resolve the shortcut, if it is a shortcut (Windows only). + + //! A value indicating all normalization flags except for @c wxPATH_NORM_CASE. wxPATH_NORM_ALL = 0x00ff & ~wxPATH_NORM_CASE }; +/** + Flags for wxFileName::Rmdir(). + */ +enum +{ + /// Delete the specified directory and its subdirectories if they are empty. + wxPATH_RMDIR_FULL = 1, + + /** + Delete the specified directory and all the files and subdirectories in it + recursively. + + This flag is obviously @b dangerous and should be used with care and + after asking the user for confirmation. + */ + wxPATH_RMDIR_RECURSIVE = 2 +}; + /** The return value of wxFileName::GetSize() in case of error. */ @@ -148,6 +175,7 @@ wxULongLong wxInvalidSize; @li wxFileName::AssignCwd() @li wxFileName::AssignDir() @li wxFileName::AssignHomeDir() + @li wxFileName::AssignTempFileName() @li wxFileName::DirName() @li wxFileName::FileName() @li wxFileName::operator=() @@ -320,7 +348,7 @@ public: @see GetCwd() */ - static void AssignCwd(const wxString& volume = wxEmptyString); + void AssignCwd(const wxString& volume = wxEmptyString); /** Sets this file name object to the given directory name. @@ -334,17 +362,32 @@ public: */ void AssignHomeDir(); - //@{ /** The function calls CreateTempFileName() to create a temporary file and sets this object to the name of the file. If a temporary file couldn't be created, the object is put into - an invalid state (see IsOk()) + an invalid state (see IsOk()). + */ + void AssignTempFileName(const wxString& prefix); + + /** + The function calls CreateTempFileName() to create a temporary + file name and open @a fileTemp with it. + + If the file couldn't be opened, the object is put into + an invalid state (see IsOk()). */ void AssignTempFileName(const wxString& prefix, wxFile* fileTemp); + + /** + The function calls CreateTempFileName() to create a temporary + file name and open @a fileTemp with it. + + If the file couldn't be opened, the object is put into + an invalid state (see IsOk()). + */ void AssignTempFileName(const wxString& prefix, wxFFile* fileTemp); - //@} /** Reset all components to default, uninitialized state. @@ -359,6 +402,7 @@ public: */ void ClearExt(); + //@{ /** Returns a temporary file name starting with the given @e prefix. If the @a prefix is an absolute path, the temporary file is created in this @@ -383,6 +427,9 @@ public: */ static wxString CreateTempFileName(const wxString& prefix, wxFile* fileTemp = NULL); + static wxString CreateTempFileName(const wxString& prefix, + wxFFile* fileTemp = NULL); + //@} /** Returns @true if the directory with this name exists. @@ -522,7 +569,7 @@ public: The possible flags values are: - - @b wxPATH_GET_VOLUME + - @b wxPATH_GET_VOLUME: Return the path with the volume (does nothing for the filename formats without volumes), otherwise the path without volume part is returned. @@ -546,7 +593,7 @@ public: @see GetPathSeparators() */ - static wxChar GetPathSeparator(wxPathFormat format = wxPATH_NATIVE); + static wxUniChar GetPathSeparator(wxPathFormat format = wxPATH_NATIVE); /** Returns the string containing all the path separators for this format. @@ -592,7 +639,7 @@ public: not be read (because e.g. the file is locked by another process) the returned value is ::wxInvalidSize. */ - const static wxULongLong GetSize(const wxString& filename); + static wxULongLong GetSize(const wxString& filename); /** Returns the directory used for temporary files. @@ -873,7 +920,7 @@ public: @param flags The kind of normalization to do with the file name. It can be - any or-combination of the wxPathNormalize enumeration values. + any or-combination of the ::wxPathNormalize enumeration values. @param cwd If not empty, this directory will be used instead of current working directory in normalization (see @c wxPATH_NORM_ABSOLUTE). @@ -904,15 +951,80 @@ public: */ void RemoveLastDir(); + /** + If the path contains the value of the environment variable named @a envname + then this function replaces it with the string obtained from + wxString::Format(replacementFmtString, value_of_envname_variable). + + This function is useful to make the path shorter or to make it dependent + from a certain environment variable. + Normalize() with @c wxPATH_NORM_ENV_VARS can perform the opposite of this + function (depending on the value of @a replacementFmtString). + + The name and extension of this filename are not modified. + + Example: + @code + wxFileName fn("/usr/openwin/lib/someFile"); + fn.ReplaceEnvVariable("OPENWINHOME"); + // now fn.GetFullPath() == "$OPENWINHOME/lib/someFile" + @endcode + + @since 2.9.0 + + @return @true if the operation was successful (which doesn't mean + that something was actually replaced, just that ::wxGetEnv + didn't fail). + */ + bool ReplaceEnvVariable(const wxString& envname, + const wxString& replacementFmtString = "$%s", + wxPathFormat format = wxPATH_NATIVE); + + /** + Replaces, if present in the path, the home directory for the given user + (see ::wxGetHomeDir) with a tilde (~). + + Normalize() with @c wxPATH_NORM_TILDE performs the opposite of this + function. + + The name and extension of this filename are not modified. + + @since 2.9.0 + + @return @true if the operation was successful (which doesn't mean + that something was actually replaced, just that ::wxGetHomeDir + didn't fail). + */ + bool ReplaceHomeDir(wxPathFormat format = wxPATH_NATIVE); + + /** Deletes the specified directory from the file system. + + @param flags + Can contain one of wxPATH_RMDIR_FULL or wxPATH_RMDIR_RECURSIVE. By + default contains neither so the directory will not be removed + unless it is empty. + + @return Returns @true if the directory was successfully deleted, @false + otherwise. */ - bool Rmdir(); + bool Rmdir(int flags = 0); /** Deletes the specified directory from the file system. + + @param dir + The directory to delete + @param flags + Can contain one of wxPATH_RMDIR_FULL or wxPATH_RMDIR_RECURSIVE. By + default contains neither so the directory will not be removed + unless it is empty. + + @return Returns @true if the directory was successfully deleted, @false + otherwise. */ - static bool Rmdir(const wxString& dir); + static bool Rmdir(const wxString& dir, int flags = 0); /** Compares the filename using the rules of this platform. @@ -994,18 +1106,19 @@ public: trailing dot, but empty. If you need to cope with such cases, you should use @a hasExt instead of relying on testing whether @a ext is empty or not. */ - static void SplitPath(const wxString& fullpath, wxString* volume, + static void SplitPath(const wxString& fullpath, + wxString* volume, wxString* path, wxString* name, wxString* ext, - bool hasExt = NULL, + bool* hasExt = NULL, wxPathFormat format = wxPATH_NATIVE); static void SplitPath(const wxString& fullpath, wxString* volume, wxString* path, wxString* name, wxString* ext, - wxPathFormat format = wxPATH_NATIVE); + wxPathFormat format); static void SplitPath(const wxString& fullpath, wxString* path, wxString* name, @@ -1024,6 +1137,28 @@ public: wxString* path, wxPathFormat format = wxPATH_NATIVE); + + /** + Strip the file extension. + + This function does more than just removing everything after the last + period from the string, for example it will return the string ".vimrc" + unchanged because the part after the period is not an extension but the + file name in this case. You can use wxString::BeforeLast() to really + get just the part before the last period (but notice that that function + returns empty string if period is not present at all unlike this + function which returns the @a fullname unchanged in this case). + + @param fullname + File path including name and, optionally, extension. + + @return + File path without extension + + @since 2.9.0 + */ + static wxString StripExtension(const wxString& fullname); + /** Sets the access and modification times to the current moment. */ @@ -1063,4 +1198,3 @@ public: */ wxFileName& operator=(const wxString& filename); }; -