git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27090 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
\section{wxFileSystem}\label{fs}
 | 
						|
 | 
						|
The wxHTML library uses a {\bf virtual file systems} mechanism
 | 
						|
similar to the one used in Midnight Commander, Dos Navigator,
 | 
						|
FAR or almost any modern file manager. It allows the user to access
 | 
						|
data stored in archives as if they were ordinary files. On-the-fly
 | 
						|
generated files that exist only in memory are also supported.
 | 
						|
 | 
						|
\wxheading{Classes}
 | 
						|
 | 
						|
Three classes are used in order to provide virtual file systems mechanism:
 | 
						|
 | 
						|
\begin{itemize}\itemsep=0pt
 | 
						|
\item The \helpref{wxFSFile}{wxfsfile} class provides information
 | 
						|
about opened file (name, input stream, mime type and anchor).
 | 
						|
\item The \helpref{wxFileSystem}{wxfilesystem} class is the interface.
 | 
						|
Its main methods are ChangePathTo() and OpenFile(). This class
 | 
						|
is most often used by the end user.
 | 
						|
\item The \helpref{wxFileSystemHandler}{wxfilesystemhandler} is the core
 | 
						|
of virtual file systems mechanism. You can derive your own handler and pass it to
 | 
						|
of the VFS mechanism. You can derive your own handler and pass it to
 | 
						|
wxFileSystem's AddHandler() method. In the new handler you only need to
 | 
						|
override the OpenFile() and CanOpen() methods.
 | 
						|
\end{itemize}
 | 
						|
 | 
						|
\wxheading{Locations}
 | 
						|
 | 
						|
Locations (aka filenames aka addresses) are constructed from four parts:
 | 
						|
 | 
						|
\begin{itemize}\itemsep=0pt
 | 
						|
\item {\bf protocol} - handler can recognize if it is able to open a
 | 
						|
file by checking its protocol. Examples are "http", "file" or "ftp".
 | 
						|
\item {\bf right location} - is the name of file within the protocol.
 | 
						|
In "http://www.wxwidgets.org/index.html" the right location is "//www.wxwidgets.org/index.html".
 | 
						|
\item {\bf anchor} - an anchor is optional and is usually not present.
 | 
						|
In "index.htm\#chapter2" the anchor is "chapter2".
 | 
						|
\item {\bf left location} - this is usually an empty string. 
 | 
						|
It is used by 'local' protocols such as ZIP.
 | 
						|
See Combined Protocols paragraph for details.
 | 
						|
\end{itemize}
 | 
						|
 | 
						|
\wxheading{Combined Protocols}
 | 
						|
 | 
						|
The left location precedes the protocol in the URL string. 
 | 
						|
It is not used by global protocols like HTTP but it becomes handy when nesting
 | 
						|
protocols - for example you may want to access files in a ZIP archive:
 | 
						|
 | 
						|
file:archives/cpp\_doc.zip\#zip:reference/fopen.htm\#syntax
 | 
						|
 | 
						|
In this example, the protocol is "zip", right location is
 | 
						|
"reference/fopen.htm", anchor is "syntax" and left location
 | 
						|
is "file:archives/cpp\_doc.zip". 
 | 
						|
 | 
						|
There are {\bf two} protocols used in this example: "zip" and "file".
 | 
						|
 | 
						|
\wxheading{File Systems Included in wxHTML}
 | 
						|
 | 
						|
The following virtual file system handlers are part of wxWidgets so far:
 | 
						|
 | 
						|
\begin{twocollist}
 | 
						|
\twocolitem{{\bf wxInternetFSHandler}}{A handler for accessing documents
 | 
						|
via HTTP or FTP protocols. Include file is <wx/fs\_inet.h>.}
 | 
						|
\twocolitem{{\bf wxZipFSHandler}}{A handler for ZIP archives. 
 | 
						|
Include file is <wx/fs\_zip.h>. URL is in form "archive.zip\#zip:filename".}
 | 
						|
\twocolitem{{\bf wxMemoryFSHandler}}{This handler allows you to access 
 | 
						|
data stored in memory (such as bitmaps) as if they were regular files.
 | 
						|
See \helpref{wxMemoryFSHandler documentation}{wxmemoryfshandler} for details.
 | 
						|
Include file is <wx/fs\_mem.h>. URL is prefixed with memory:, e.g. 
 | 
						|
"memory:myfile.htm"}
 | 
						|
\end{twocollist}
 | 
						|
 | 
						|
In addition, wxFileSystem itself can access local files.
 | 
						|
 | 
						|
 | 
						|
\wxheading{Initializing file system handlers}
 | 
						|
 | 
						|
Use \helpref{wxFileSystem::AddHandler}{wxfilesystemaddhandler} to initialize
 | 
						|
a handler, for example:
 | 
						|
 | 
						|
\begin{verbatim}
 | 
						|
#include <wx/fs_mem.h>
 | 
						|
 | 
						|
...
 | 
						|
 | 
						|
bool MyApp::OnInit()
 | 
						|
{
 | 
						|
    wxFileSystem::AddHandler(new wxMemoryFSHandler);
 | 
						|
...
 | 
						|
}
 | 
						|
\end{verbatim}
 | 
						|
 |