Zpack (开源)

May 6th, 2013

zpack是一个小巧,高效,开源的文件打包格式。

Google code页面

svn地址:http://zpack.googlecode.com/svn/trunk/

下载zpack源代码与编辑器(zpEditor)

  1. 解压后运行zpEditor
  2. 打开SourceCode.zpk
  3. 释放(Extract)包内所有文件

主要特性:

  • 速度
    • 以文件名hash方式检索,读取效率至上
    • 删除包内文件时,只删除文件索引,不需要移动包内数据
    • 在两次flush之间用户可以添加任意多个文件(例如添加整个目录),这期间除了被添加文件数据的写入,没有任何其它多余的文件IO操作
  • 尺寸
    • 添加文件时,优先插入到之前删除文件留下的空闲位置,尽可能利用空间
    • 用户可以调用countFragmentSize检查当前包内空闲空间字节数,必要的话可以调用defrag进行整理以释放空间
    • 暂不支持数据压缩,但用户很容易自行添加压缩支持
  • 安全/健壮
    • 严格保证在用户调用flush()之前,包文件的有效性。这样当用户一次添加/删除较多文件的过程中即使发生意外(例如停电,进程被强行终止等),包文件能保持最后一次flush后的逻辑结构,不会发生灾难性后果
    • 包文件以只读方式打开时,原始的文件名信息不会被加载到内存。也就是说用户可以选择不将原始目录结构和文件名写入包内,包文件仍然能正常读取
  • 可扩展/兼容
    • 从设计上保证当将来需要扩展包文件头或包内文件索引中的数据时,老的代码仍能读取新的数据结构
    • 当数据包和zpEditor版本不一致时,zpEditor仍可以以只读模式打开数据包
  • 工具
    • 虽然包内文件是以扁平方式组织(以保证检索效率),但zpack另外提供工具类ZpExplorer,让用户可以以树状目录形式浏览和编辑包内文件
    • 提供命令行工具,接近dos使用习惯
    • 提供类似windows explorer的编辑器
  • 其它
    • 包文件不受4g大小限制
    • 核心读取模块仅依赖c++标准库,很容易移植到windows以外的平台,例如Linux,Mac,iPhone等
    • 代码小巧精简,不提供任何多余接口。zpack核心源代码仅20k左右

更新记录

13-04-08 版本0.81

  • 修正bug
  • zpCmd支持add和extrace的命令行参数:
    • zpCmd.exe add packPath.zpk srcFilePath dstFilePath
    • zpCmd.exe extract packPath.zpk dstFilePath

12-04-26 版本0.8

  • 支持压缩

11-06-07 版本0.55

  • 修正双击打开zpk文件时zpEditor的显示错误
  • flush文件操作时保证不覆盖老的file entry,进一步增强容错性

11-01-29 版本0.54

  • zpEditor
    • 支持以只读方式打开
    • 支持文件鼠标拖拽操作
    • 支持直接打开包内文件
    • 支持释放到当前目录

11-01-16 版本0.51

  • 支持从zpEditor中直接打开包内文件

11-01-14 版本0.5

  • 支持unicode
  • 修正若干编辑器bug
  • 强化安全机制,保证意外情况下包文件的有效性

11-01-09 版本0.4

  • zpEditor完成

10-12-31 版本0.3

  • 支持文件相对路径
  • 可定制是否大小写敏感
  • 可定制路径分隔符为/或\

10-12-28 版本0.2

  • 完善命令行工具

相关文章:

zpack: 一个简单的文件打包格式

Comments are closed.