]> git.saurik.com Git - wxWidgets.git/commitdiff
1. GetCwd() now has the volume argument, Normalize() works correctly for the
authorVadim Zeitlin <vadim@wxwidgets.org>
Sat, 1 Dec 2001 03:16:19 +0000 (03:16 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Sat, 1 Dec 2001 03:16:19 +0000 (03:16 +0000)
   paths without full path but with the volume
2. fixed old SplitPath() version without volume to behave in a backwards
   compatible way
3. added more docs

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12784 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/latex/wx/filename.tex
include/wx/filename.h
src/common/filename.cpp

index 992aead482504774c77807f9e6c85c9d7bdf73bf..8f5ed744918cc3c0bbf6f12b37890be134e9ec73 100644 (file)
@@ -65,42 +65,115 @@ enum wxPathNormalize
 }
 \end{verbatim}
 
 }
 \end{verbatim}
 
+\latexignore{\rtfignore{\wxheading{Function groups}}}
+
+\membersection{File name format}
+
+wxFileName currently supports the file names in the Unix, DOS/Windows, Mac OS
+and VMS formats. Although these formats are quite different, wxFileName tries
+to treat them all in the sam generic way. It supposes that all file names
+consist of the following parts: the volume (also known as drive under Windows
+or device under VMS), the path which is a sequence of directory names separated
+by the \helpref{path separators}{wxfilenamegetpathseparators} and the full
+filename itself which, in turn, is composed from the base file name and the
+extension. All of the individual components of the file name may be empty and,
+for example, the volume name is always empty under Unix, but if they are all
+empty simultaneously, the filename object is considered to be in an invalid
+state and \helpref{IsOk}{wxfilenameisok} returns {\tt FALSE} for it.
+
+File names can be case-sensitive or not, the function\rtfsp
+\helpref{IsCaseSensitive}{wxfilenameiscasesensitive} allows to determine this.
+
+The rules for determining if the file name is absolute or relative also depends
+on the file name format and the only portable way to answer to this question is
+to use \helpref{IsAbsolute}{wxfilenameisabsolute} method. To ensure that the
+filename is absolute you may use \helpref{Normalize}{wxfilenamenormalize}.
+
+Other functions returning information about the file format provided by this
+class are \helpref{GetVolumeSeparator}{wxfilenamegetvolumeseparator},\rtfsp
+\helpref{IsPathSeparator}{wxfilenameispathseparator} and\rtfsp
+\helpref{IsWild}{wxfilenameiswild}.
+
+\helpref{IsRelative}{wxfilenameisrelative}
+
+\membersection{File name construction}
+
+TODO.
+
+\membersection{File tests}
+
+Before doing the other tests you should use \helpref{IsOk}{wxfilenameisok} to
+verify that the filename is well defined. If it is, 
+\helpref{FileExists}{wxfilenamefileexists} can be used to test if a file with
+such name exists and \helpref{DirExists}{wxfilenamedirexists} - if a directory
+with this name exists.
+
+File names should be compared using \helpref{SameAs}{wxfilenamesameas} method
+or \helpref{$==$}{wxfilenameoperatorequal}.
+
+\membersection{File name components}
+
+These functions allow to examine and modify the directories of the path:
+
+\helpref{AppendDir}{wxfilenameappenddir}\\
+\helpref{InsertDir}{wxfilenameinsertdir}\\
+\helpref{GetDirCount}{wxfilenamegetdircount}
+\helpref{PrependDir}{wxfilenameprependdir}\\
+\helpref{RemoveDir}{wxfilenameremovedir}
+
+To change the components of the file name individually you can use the
+following functions:
+
+\helpref{GetExt}{wxfilenamegetext}\\
+\helpref{GetName}{wxfilenamegetname}\\
+\helpref{GetVolume}{wxfilenamegetvolume}\\
+\helpref{HasExt}{wxfilenamehasext}\\
+\helpref{HasName}{wxfilenamehasname}\\
+\helpref{HasVolume}{wxfilenamehasvolume}\\
+\helpref{SetExt}{wxfilenamesetext}\\
+\helpref{SetName}{wxfilenamesetname}\\
+\helpref{SetVolume}{wxfilenamesetvolume}\\
+
+\membersection{Operations}
+
+These methods allow to work with the file creation, access and modification
+times:
+
+\helpref{GetModificationTime}{wxfilenamegetmodificationtime}\\
+\helpref{GetTimes}{wxfilenamegettimes}\\
+\helpref{SetTimes}{wxfilenamesettimes}\\
+\helpref{Touch}{wxfilenametouch}
+
+Other file system operations functions are:
+
+\helpref{Mkdir}{wxfilenamemkdir}\\
+\helpref{Rmdir}{wxfilenamermdir}
+
 \latexignore{\rtfignore{\wxheading{Members}}}
 
 \latexignore{\rtfignore{\wxheading{Members}}}
 
-\membersection{wxFileName::wxFileName}\label{wxfilenamewxfilenamedef}
+\membersection{wxFileName::wxFileName}\label{wxfilenamewxfilename}
 
 \func{}{wxFileName}{\void}
 
 Default constructor.
 
 
 \func{}{wxFileName}{\void}
 
 Default constructor.
 
-\membersection{wxFileName::wxFileName}\label{wxfilenamewxfilenamecopy}
-
 \func{}{wxFileName}{\param{const wxFileName\& }{filename}}
 
 Copy constructor.
 
 \func{}{wxFileName}{\param{const wxFileName\& }{filename}}
 
 Copy constructor.
 
-\membersection{wxFileName::wxFileName}\label{wxfilenamewxfilename1}
-
 \func{}{wxFileName}{\param{const wxString\& }{fullpath}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
 \func{}{wxFileName}{\param{const wxString\& }{fullpath}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
-from a full filename: if it terminates with a '/', a directory path
+From a full filename: if it terminates with a '/', a directory path
 is contructed (the name will be empty), otherwise a file name and
 extension are extracted from it
 
 is contructed (the name will be empty), otherwise a file name and
 extension are extracted from it
 
-
-\membersection{wxFileName::wxFileName}\label{wxfilenamewxfilename2}
-
 \func{}{wxFileName}{\param{const wxString\& }{path}, \param{const wxString\& }{name}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
 \func{}{wxFileName}{\param{const wxString\& }{path}, \param{const wxString\& }{name}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
-from a directory name and a file name
-
-
-\membersection{wxFileName::wxFileName}\label{wxfilenamewxfilename3}
+Constructor from a directory name and a file name.
 
 \func{}{wxFileName}{\param{const wxString\& }{path}, \param{const wxString\& }{name}, \param{const wxString\& }{ext}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
 
 \func{}{wxFileName}{\param{const wxString\& }{path}, \param{const wxString\& }{name}, \param{const wxString\& }{ext}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
-from a directory name, file base name and extension
-
+Constructor from a directory name, file base name and extension
 
 \membersection{wxFileName::AppendDir}\label{wxfilenameappenddir}
 
 
 \membersection{wxFileName::AppendDir}\label{wxfilenameappenddir}
 
@@ -134,11 +207,14 @@ from a directory name, file base name and extension
 
 \membersection{wxFileName::AssignCwd}\label{wxfilenameassigncwd}
 
 
 \membersection{wxFileName::AssignCwd}\label{wxfilenameassigncwd}
 
-\func{void}{AssignCwd}{\void}
+\func{void}{AssignCwd}{\param{const wxString\& }{volume = ""}}
+
+Makes this object refer to the current working directory on the specified
+volume (or current volume if {\it volume} is empty).
 
 
-various file/dir operations
-retrieve the value of the current working directory
+\wxheading{See also}
 
 
+\helpref{GetCwd}{wxfilenamegetcwd}
 
 \membersection{wxFileName::AssignDir}\label{wxfilenameassigndir}
 
 
 \membersection{wxFileName::AssignDir}\label{wxfilenameassigndir}
 
@@ -206,8 +282,20 @@ static pseudo constructors
 
 \membersection{wxFileName::GetCwd}\label{wxfilenamegetcwd}
 
 
 \membersection{wxFileName::GetCwd}\label{wxfilenamegetcwd}
 
-\func{wxString}{GetCwd}{\void}
+\func{wxString}{GetCwd}{\param{const wxString\& }{volume = ""}}
+
+Retrieve the value of the current working directory on the specified volume. If
+the volume is empty, the programs current working directory is returned for the
+current volume.
+
+\wxheading{Return value}
+
+The string containing the current working directory or an empty string on
+error.
 
 
+\wxheading{See also}
+
+\helpref{AssignCwd}{wxfilenameassigncwd}
 
 \membersection{wxFileName::GetDirCount}\label{wxfilenamegetdircount}
 
 
 \membersection{wxFileName::GetDirCount}\label{wxfilenamegetdircount}
 
@@ -384,14 +472,18 @@ FIXME: what exactly does this do?
 
 \func{bool}{Mkdir}{\param{int }{perm = 0777}, \param{bool }{full = FALSE}}
 
 
 \func{bool}{Mkdir}{\param{int }{perm = 0777}, \param{bool }{full = FALSE}}
 
-directory creation and removal.
-if full is TRUE, will try to make each directory in the path.
+\func{static bool}{Mkdir}{\param{const wxString\& }{dir}, \param{int }{perm = 0777}, \param{bool }{full = FALSE}}
 
 
+\docparam{dir}{the directory to create}
 
 
-\membersection{wxFileName::Mkdir}\label{wxfilenamemkdir}
+\docparam{parm}{the permissions for the newly created directory}
+
+\docparam{full}{if {\tt TRUE}, will try to make each directory in the path}
 
 
-\func{bool}{Mkdir}{\param{const wxString\& }{dir}, \param{int }{perm = 0777}, \param{bool }{full = FALSE}}
+\wxheading{Return value}
 
 
+Returns {\tt TRUE} if the directory was successfully created, {\tt FALSE}
+otherwise.
 
 \membersection{wxFileName::Normalize}\label{wxfilenamenormalize}
 
 
 \membersection{wxFileName::Normalize}\label{wxfilenamenormalize}
 
@@ -418,30 +510,25 @@ this may be done using another (than current) value of cwd
 
 \func{bool}{Rmdir}{\void}
 
 
 \func{bool}{Rmdir}{\void}
 
+\func{static bool}{Rmdir}{\param{const wxString\& }{dir}}
 
 
-\membersection{wxFileName::Rmdir}\label{wxfilenamermdir}
-
-\func{bool}{Rmdir}{\param{const wxString\& }{dir}}
+Deletes the specified directory.
 
 
 \membersection{wxFileName::SameAs}\label{wxfilenamesameas}
 
 \func{bool}{SameAs}{\param{const wxFileName\& }{filepath}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
 
 
 \membersection{wxFileName::SameAs}\label{wxfilenamesameas}
 
 \func{bool}{SameAs}{\param{const wxFileName\& }{filepath}, \param{wxPathFormat }{format = wxPATH\_NATIVE}}
 
-compares with the rules of this platform
+Compares the filename using the rules of this platform
 
 
 \membersection{wxFileName::SetCwd}\label{wxfilenamesetcwd}
 
 \func{bool}{SetCwd}{\void}
 
 
 
 \membersection{wxFileName::SetCwd}\label{wxfilenamesetcwd}
 
 \func{bool}{SetCwd}{\void}
 
-change the current working directory
-
-
-\membersection{wxFileName::SetCwd}\label{wxfilenamesetcwd}
-
-\func{bool}{SetCwd}{\param{const wxString\& }{cwd}}
+\func{static bool}{SetCwd}{\param{const wxString\& }{cwd}}
 
 
+change the current working directory
 
 \membersection{wxFileName::SetExt}\label{wxfilenamesetext}
 
 
 \membersection{wxFileName::SetExt}\label{wxfilenamesetext}
 
@@ -493,20 +580,15 @@ set the access and modification times to the current moment
 
 \func{wxFileName\& operator}{operator=}{\param{const wxFileName\& }{filename}}
 
 
 \func{wxFileName\& operator}{operator=}{\param{const wxFileName\& }{filename}}
 
-
-\membersection{wxFileName::operator=}\label{wxfilenameoperatorassign}
-
 \func{wxFileName\& operator}{operator=}{\param{const wxString\& }{filename}}
 
 \func{wxFileName\& operator}{operator=}{\param{const wxString\& }{filename}}
 
+Assigns the new value to this filename object.
 
 \membersection{wxFileName::operator==}\label{wxfilenameoperatorequal}
 
 \func{bool operator}{operator==}{\param{const wxFileName\& }{filename}}
 
 
 \membersection{wxFileName::operator==}\label{wxfilenameoperatorequal}
 
 \func{bool operator}{operator==}{\param{const wxFileName\& }{filename}}
 
-uses the current platform settings
-
-
-\membersection{wxFileName::operator==}\label{wxfilenameoperatorequal}
-
 \func{bool operator}{operator==}{\param{const wxString\& }{filename}}
 
 \func{bool operator}{operator==}{\param{const wxString\& }{filename}}
 
+Returns {\tt TRUE} if the filenames are equal for the native file format.
+
index 56daaa18094cd3f6226b4c63f4a787d2c7321e76..95666dc2b9e7ba0ee0364dde751640e3af4acba2 100644 (file)
@@ -189,8 +189,8 @@ public:
     // various file/dir operations
 
         // retrieve the value of the current working directory
     // various file/dir operations
 
         // retrieve the value of the current working directory
-    void AssignCwd();
-    static wxString GetCwd();
+    void AssignCwd(const wxString& volume = wxEmptyString);
+    static wxString GetCwd(const wxString& volume = wxEmptyString);
 
         // change the current working directory
     bool SetCwd();
 
         // change the current working directory
     bool SetCwd();
@@ -321,10 +321,7 @@ public:
                           wxString *path,
                           wxString *name,
                           wxString *ext,
                           wxString *path,
                           wxString *name,
                           wxString *ext,
-                          wxPathFormat format = wxPATH_NATIVE)
-    {
-        SplitPath(fullpath, NULL, path, name, ext, format);
-    }
+                          wxPathFormat format = wxPATH_NATIVE);
 
 private:
     // the drive/volume/device specification (always empty for Unix)
 
 private:
     // the drive/volume/device specification (always empty for Unix)
index b6dd43a825bbfc35c624d24fa2c2a484d4c12edf..2c21016d13f7e5571abb4f7f849f44d93e65d717 100644 (file)
@@ -311,15 +311,33 @@ bool wxFileName::DirExists( const wxString &dir )
 // CWD and HOME stuff
 // ----------------------------------------------------------------------------
 
 // CWD and HOME stuff
 // ----------------------------------------------------------------------------
 
-void wxFileName::AssignCwd()
+void wxFileName::AssignCwd(const wxString& volume)
 {
 {
-    AssignDir(wxFileName::GetCwd());
+    AssignDir(wxFileName::GetCwd(volume));
 }
 
 /* static */
 }
 
 /* static */
-wxString wxFileName::GetCwd()
+wxString wxFileName::GetCwd(const wxString& volume)
 {
 {
-    return ::wxGetCwd();
+    // if we have the volume, we must get the current directory on this drive
+    // and to do this we have to chdir to this volume - at least under Windows,
+    // I don't know how to get the current drive on another volume elsewhere
+    // (TODO)
+    wxString cwdOld;
+    if ( !volume.empty() )
+    {
+        cwdOld = wxGetCwd();
+        SetCwd(volume + GetVolumeSeparator());
+    }
+
+    wxString cwd = ::wxGetCwd();
+
+    if ( !volume.empty() )
+    {
+        SetCwd(cwdOld);
+    }
+
+    return cwd;
 }
 
 bool wxFileName::SetCwd()
 }
 
 bool wxFileName::SetCwd()
@@ -432,9 +450,13 @@ bool wxFileName::Normalize(wxPathNormalize flags,
     if ( (flags & wxPATH_NORM_ABSOLUTE) && !IsAbsolute() )
     {
         if ( cwd.empty() )
     if ( (flags & wxPATH_NORM_ABSOLUTE) && !IsAbsolute() )
     {
         if ( cwd.empty() )
-            curDir.AssignCwd();
-        else
+        {
+            curDir.AssignCwd(GetVolume());
+        }
+        else // cwd provided
+        {
             curDir.AssignDir(cwd);
             curDir.AssignDir(cwd);
+        }
 
         // the path may be not absolute because it doesn't have the volume name
         // but in this case we shouldn't modify the directory components of it
 
         // the path may be not absolute because it doesn't have the volume name
         // but in this case we shouldn't modify the directory components of it
@@ -976,6 +998,7 @@ wxPathFormat wxFileName::GetFormat( wxPathFormat format )
 // path splitting function
 // ----------------------------------------------------------------------------
 
 // path splitting function
 // ----------------------------------------------------------------------------
 
+/* static */
 void wxFileName::SplitPath(const wxString& fullpathWithVolume,
                            wxString *pstrVolume,
                            wxString *pstrPath,
 void wxFileName::SplitPath(const wxString& fullpathWithVolume,
                            wxString *pstrVolume,
                            wxString *pstrPath,
@@ -1121,6 +1144,22 @@ void wxFileName::SplitPath(const wxString& fullpathWithVolume,
     }
 }
 
     }
 }
 
+/* static */
+void wxFileName::SplitPath(const wxString& fullpath,
+                           wxString *path,
+                           wxString *name,
+                           wxString *ext,
+                           wxPathFormat format)
+{
+    wxString volume;
+    SplitPath(fullpath, &volume, path, name, ext, format);
+
+    if ( path && !volume.empty() )
+    {
+        path->Prepend(volume + GetVolumeSeparator(format));
+    }
+}
+
 // ----------------------------------------------------------------------------
 // time functions
 // ----------------------------------------------------------------------------
 // ----------------------------------------------------------------------------
 // time functions
 // ----------------------------------------------------------------------------