\section{\class{wxFileSystem}}\label{wxfilesystem}
-This class provides interface for opening files on different
+This class provides an interface for opening files on different
file systems. It can handle absolute and/or local filenames.
-It uses system of \helpref{handlers}{wxfilesystemhandler} to
+It uses a system of \helpref{handlers}{wxfilesystemhandler} to
provide access to user-defined virtual file systems.
\wxheading{Derived from}
-wxObject
+\helpref{wxObject}{wxobject}
+
+\wxheading{Include files}
+
+<wx/filesys.h>
\wxheading{See Also}
-\helpref{wxFileSystemHandler}{wxfilesystemhandler},
-\helpref{wxFSFile}{wxfsfile},
+\helpref{wxFileSystemHandler}{wxfilesystemhandler},
+\helpref{wxFSFile}{wxfsfile},
\helpref{Overview}{fs}
\latexignore{\rtfignore{\wxheading{Members}}}
+
\membersection{wxFileSystem::wxFileSystem}\label{wxfilesystemwxfilesystem}
\func{}{wxFileSystem}{\void}
Constructor.
+
+\membersection{wxFileSystem::AddHandler}\label{wxfilesystemaddhandler}
+
+\func{static void}{AddHandler}{\param{wxFileSystemHandler }{*handler}}
+
+This static function adds new handler into the list of
+\helpref{handlers}{wxfilesystemhandler} which provide access to virtual FS.
+Note that if two handlers for the same protocol are added, the last one added
+takes precedence.
+
+\wxheading{Note}
+
+You can call:
+
+\begin{verbatim}
+wxFileSystem::AddHandler(new My_FS_Handler);
+\end{verbatim}
+
+This is because (a) AddHandler is a static method, and (b) the handlers
+are deleted in wxFileSystem's destructor so that you don't have to
+care about it.
+
+
+\membersection{wxFileSystem::HasHandlerForPath}\label{wxfilesystemhashandlerforpath}
+
+\func{static bool}{HasHandlerForPath}{\param{const wxString \&}{ location}}
+
+This static function returns \true if there is a registered handler which can open the given
+location.
+
+
\membersection{wxFileSystem::ChangePathTo}\label{wxfilesystemchangepathto}
-\func{void}{ChangePathTo}{\param{const wxString\& }{location}, \param{bool }{is\_dir = FALSE}}
+\func{void}{ChangePathTo}{\param{const wxString\& }{location}, \param{bool }{is\_dir = false}}
Sets the current location. {\it location} parameter passed to
\helpref{OpenFile}{wxfilesystemopenfile} is relative to this path.
-{\bf Caution! } Unless {\it is\_dir} is TRUE the {\it location} parameter
-is not directory name but the name of the file in this directory!! All these
-commands change path to "dir/subdir/" :
+{\bf Caution! } Unless {\it is\_dir} is true the {\it location} parameter
+is not the directory name but the name of the file in this directory. All these
+commands change the path to "dir/subdir/":
\begin{verbatim}
-ChangePathTo("dir/subdir/xh.htm");
-ChangePathTo("dir/subdir", TRUE);
-ChangePathTo("dir/subdir/", TRUE);
+ ChangePathTo("dir/subdir/xh.htm");
+ ChangePathTo("dir/subdir", true);
+ ChangePathTo("dir/subdir/", true);
\end{verbatim}
\wxheading{Parameters}
-\docparam{location}{the new location. Its meaning depends on value of {\it is\_dir}}
+\docparam{location}{the new location. Its meaning depends on the value of {\it is\_dir}}
-\docparam{is\_dir}{if TRUE {\it location} is new directory. If FALSE (default)
+\docparam{is\_dir}{if true {\it location} is new directory. If false (default)
{\it location} is {\bf file in} the new directory.}
\wxheading{Example}
\begin{verbatim}
-f = fs -> OpenFile("hello.htm"); // opens file 'hello.htm'
-fs -> ChangePathTo("subdir/folder", TRUE);
-f = fs -> OpenFile("hello.htm"); // opens file 'subdir/folder/hello.htm' !!
+ f = fs -> OpenFile("hello.htm"); // opens file 'hello.htm'
+ fs -> ChangePathTo("subdir/folder", true);
+ f = fs -> OpenFile("hello.htm"); // opens file 'subdir/folder/hello.htm' !!
\end{verbatim}
+
\membersection{wxFileSystem::GetPath}\label{wxfilesystemgetpath}
\func{wxString}{GetPath}{\void}
Returns actual path (set by \helpref{ChangePathTo}{wxfilesystemchangepathto}).
+
+\membersection{wxFileSystem::FileNameToURL}\label{wxfilesystemfilenametourl}
+
+\func{static wxString}{FileNameToURL}{\param{wxFileName }{filename}}
+
+Converts filename into URL.
+
+\wxheading{See also}
+
+\helpref{wxFileSystem::URLToFileName}{wxfilesystemurltofilename},
+\helpref{wxFileName}{wxfilename}
+
+
+\membersection{wxFileSystem::FindFileInPath}\label{wxfilesystemfindfileinpath}
+
+\func{bool}{FindFileInPath}{\param{wxString }{*str}, \param{const wxString\& }{path}, \param{const wxString\& }{file}}
+
+Looks for the file with the given name \arg{file} in a colon or semi-colon
+(depending on the current platform) separated list of directories in
+\arg{path}. If the file is found in any directory, returns \true and the full
+path of the file in \arg{str}, otherwise returns \false and doesn't modify
+\arg{str}.
+
+\wxheading{Parameters}
+
+\docparam{str}{Receives the full path of the file, must not be \NULL}
+
+\docparam{path}{\texttt{wxPATH\_SEP}-separated list of directories}
+
+\docparam{file}{the name of the file to look for}
+
+
+\membersection{wxFileSystem::FindFirst}\label{wxfilesystemfindfirst}
+
+\func{wxString}{FindFirst}{\param{const wxString\& }{wildcard}, \param{int }{flags = 0}}
+
+Works like \helpref{wxFindFirstFile}{wxfindfirstfile}. Returns name of the first
+filename (within filesystem's current path) that matches {\it wildcard}. {\it flags} may be one of
+wxFILE (only files), wxDIR (only directories) or 0 (both).
+
+
+\membersection{wxFileSystem::FindNext}\label{wxfilesystemfindnext}
+
+\func{wxString}{FindNext}{\void}
+
+Returns the next filename that matches parameters passed to \helpref{FindFirst}{wxfilesystemfindfirst}.
+
+
\membersection{wxFileSystem::OpenFile}\label{wxfilesystemopenfile}
-\func{wxFSFile*}{OpenFile}{\param{const wxString\& }{location}}
+\func{wxFSFile*}{OpenFile}{\param{const wxString\& }{location}, \param{int }{flags = wxFS\_READ}}
-Opens file and returns pointer to \helpref{wxFSFile}{wxfsfile} object
+Opens the file and returns a pointer to a \helpref{wxFSFile}{wxfsfile} object
or NULL if failed. It first tries to open the file in relative scope
(based on value passed to ChangePathTo() method) and then as an
-absolute path.
+absolute path. Note that the user is responsible for deleting the returned
+wxFSFile.
-\membersection{wxFileSystem::AddHandler}\label{wxfilesystemaddhandler}
+{\it flags} can be one or more of the following bit values ored together:
-\func{static void}{AddHandler}{\param{wxFileSystemHandler }{*handler}}
+\begin{verbatim}
+// Open Bit Flags
+enum {
+ wxFS_READ = 1, // Open for reading
+ wxFS_SEEKABLE = 4 // Returned stream will be seekable
+};
+\end{verbatim}
-This static function adds new handler into the list of handlers.
-The \helpref{handlers}{wxfilesystemhandler} provide access to virtual FS.
+A stream opened with just the default {\it wxFS\_READ} flag may
+or may not be seekable depending on the underlying source.
+Passing {\it wxFS\_READ | wxFS\_SEEKABLE} for {\it flags} will
+back a stream that is not natively seekable with memory or a file
+and return a stream that is always seekable.
-\wxheading{Note}
-You can call:
+\membersection{wxFileSystem::URLToFileName}\label{wxfilesystemurltofilename}
-\begin{verbatim}
-wxFileSystem::AddHandler(new My_FS_Handler);
-\end{verbatim}
+\func{static wxFileName}{URLToFileName}{\param{const wxString\& }{url}}
-This is because (a) AddHandler is a static method, and (b) the handlers
-are deleted in wxFileSystem's destructor so that you don't have to
-care about it.
+Converts URL into a well-formed filename. The URL must use the {\tt file}
+protocol.
+
+\wxheading{See also}
+
+\helpref{wxFileSystem::FileNameToURL}{wxfilesystemfilenametourl},
+\helpref{wxFileName}{wxfilename}