这是关于即将发布的Tcl 8.7版本新特性的系列帖子中的第11篇。这是描述在Tcl中将ZIP归档视为虚拟文件系统的核心支持的两篇文章中的第一篇。这篇文章的重点是处理现有ZIP存档的基本操作。接下来介绍如何创建ZIP存档,以及如何使用它们构建Zipkit和单个文件可执行文件。
要想体验一下TCL8.7,您可以下载源代码发行版。适用于Windows的二进制发行版可从magicplat和BAWT获得。
在TCL8.6中,访问ZIP存档中的文件已经成为可能。Tcl本身提供了使用zlib命令压缩和解压缩数据的能力。然后,tcllib中的zipfile模块利用它们来允许访问归档中的文件。
Tcl8.7将ZIP存档视为可挂载的虚拟文件系统(VFS),从而超越了这些功能。这使得通过标准的Tcl通道命令open、get等访问归档中的文件变得更加简单。
访问ZIP存档的第一步是将它们挂载为Tcl VFS。这是通过zipfs mount命令完成的。
这导致存档demo.zip被挂载为路径Zipfs:/mnt下的VFS。
当然,您可以多次挂载多个归档文件,甚至可以多次挂载同一归档文件。挂载点当然必须不同,但一个可以嵌套在另一个中。例如,。
在不带任何参数的情况下调用Zipfs mount将以挂载点和归档文件路径的平面列表的形式返回当前挂载的ZIP归档。
Zip存档可以使用密码进行保护。在这种情况下,密码必须作为命令的最后一个参数提供。
Zipfs list命令返回ZIP文件系统中的文件列表。或者,可以指定正则表达式或全局通配符模式来过滤返回的路径。
%zipfs listzipfs:/mnt/demo zipfs:/mnt zipfs:/mnt/demo/subdir/file.txt zipfs:/mnt/demo/subdir zipfs:/mnt/demo/demo.txt%zipfs list*.txtzipfs:/mnt/demo/subdir/file.txt zipfs:/mnt/demo/demo.txt。
请注意,上面没有指定挂载点。该命令列出ZIP VFS根目录下的所有文件和目录。要将其限制为特定的存档,请将其指定为模式。
提示:Zipfs find命令可以用于任何文件系统,而不仅仅是ZIP VFS';ES。
由于ZIP存档是作为Tcl VFS挂载的,因此可以使用用于检索通用文件信息的标准Tcl命令。例如,。
Zipfs info命令返回特定于ZIP存档格式的附加信息。
返回的列表包含ZIP存档的名称(与最初传递的一样)、原始文件大小、压缩文件大小以及ZIP存档中文件的压缩数据的偏移量。(另外,请注意,在我们的示例中,压缩的大小大于实际大小,这在小文件中经常发生。)
归档中压缩文件的数据传输是通过标准Tcl通道I/O命令实现的。
您也可以打开该文件进行写入。但是,ZIP VFS不支持追加模式。
在描述了访问ZIP档案的基本知识之后,在下一篇文章中,我将说明如何使用新功能来创建ZIP档案、Zipkit和单文件可执行文件。