wxHTML库使用了一种虚拟文件系统机制,该机制类似于Midnight Commander、Dos Navigator、FAR或几乎任何现代文件管理器中所使用的机制。
它允许用户像访问普通文件一样访问存储在归档文件中的数据。仅存在于内存中、即时生成的文件也同样受支持。
类
为了提供虚拟文件系统机制,使用了三个类:
- wx.FSFile类提供有关已打开文件的信息(文件名、输入流、MIME类型和锚点)。
- wx.FileSystem类是一个接口。它的主要方法有wx.FileSystem.ChangePathTo和wx.FileSystem.OpenFile。这个类最常被终端用户使用。
- wx.FileSystemHandler是虚拟文件系统机制的核心。你可以派生自己的处理程序,并将其传递给虚拟文件系统(VFS)机制。你可以派生自己的处理程序,然后将其传递给wx.FileSystem.AddHandler方法。在新的处理程序中,你只需重写wx.FileSystemHandler.OpenFile和wx.FileSystemHandler.CanOpen方法即可。
位置
位置(也称为文件名,也称为地址)由四个部分构成:
- 协议——处理程序可以通过检查文件的协议来识别它是否能够打开该文件。例如“http”、“file”或“ftp” 。
- 右侧位置——是协议内的文件名。在“www.wxwidgets.org/index.html”…
- 锚点——锚点是可选的,通常并不存在。在“index.htm#chapter2”中,锚点是“chapter2”。
- 左侧位置——这通常是一个空字符串。它被诸如ZIP这样的“本地”协议所使用。有关详细信息,请参阅“组合协议”段落。
组合协议
在URL字符串中,左侧位置位于协议之前。
它并不被像HTTP这样的全局协议所使用,但在嵌套协议时却很有用——例如,你可能想要访问ZIP归档文件中的文件:
file:archives/cpp_doc.zip#zip:reference/fopen.htm#syntax
在这个例子中,协议是“zip”,右侧位置是“reference/fopen.htm”,锚点是“syntax”,而左侧位置是 file:archives/cpp_doc.zip。
在这个例子中使用了两种协议:“zip”和“file”。
wxHTML中包含的文件系统
到目前为止,以下虚拟文件系统处理程序是wxPython的一部分:
- wx.ArchiveFSHandler:用于诸如 ZIP 和 TAR 之类归档文件的处理程序。URL 示例:“archive.zip#zip:filename”,“archive.tar.gz#gzip:#tar:filename”。
- wx.FilterFSHandler:用于诸如gzip之类压缩方案的处理程序。URL的形式例如为:“document.ps.gz#gzip:” 。
- wx.InternetFSHandler:一种用于通过HTTP或FTP协议访问文档的处理程序。
- wx.MemoryFSHandler:此处理程序允许您像访问常规文件一样访问存储在内存中的数据(例如位图)。有关详细信息,请参阅wx.MemoryFSHandler。URL 以“memory:”为前缀,例如“memory:myfile.htm”。
此外,文件系统本身可以访问本地文件。
初始化文件系统处理程序
使用wx.FileSystem.AddHandler来初始化一个处理程序,例如:
def OnInit(self):
wx.FileSystem.AddHandler(wx.MemoryFSHandler())