FCI/FDI是Windows的文件压缩接口/文件解压缩接口的简称。它提供了操作CAB压缩包的具体实现算法,该接口涉及一大堆C风格的回调函数。
微软提供的关于此接口的SDK文档:点击此处下载(微软的网站上找不到了,遗憾中)
我封装的接口是一种简化版本,各个API函数已经是简单的数据类型,因此使用起来会比较容易,且提供Unicode和非Unicode二套API,如果您也对cab格式感兴趣,并希望使用我的FishCabLibU.dll,请回复,我可以提供C#版本的包装类。
功能介绍
正如本文前面的帮助文件截图所示,这个小工具有以下功能:
1. 专为备份源代码而设计,可以选择性地排除源代码目录中一些不需要备份的文件。
如:obj目录及.pdb和其它源代码版本控制信息之类的“垃圾”文件。
具体哪些文件不需要在压缩时加入压缩包,程序提供如下的设置界面来控制
2. 操作方式和现今流行的压缩软件一致,直接在资源管理器的右键菜单中操作。
前面在介绍FishCabToolExt.dll时已有说明,这里再次引用那二张图片:
3. 生成的压缩包采用cab的压缩格式,兼容现今流行的各类压缩软件。
cab格式其实早就存在了,至少也有15年以上历史。此文件格式由微软开发,且在微软的很多安装包中都在使用这种格式。由于历史悠久,且文件格式公开,因此现今流行的各类压缩软件都支持它。
注意:WinRar对cab的支持不够好,如果cab采用UTF-8编码方式创建包内文件名,在WinRar中将会看到乱码。而7z就没有问题,当然了,我的工具也能正确地解包。
4. 压缩包的文件名包含当天的操作日期,便于版本管理及日后查找。
前面说到我平时喜欢在业余时间写点小工具或者小项目,自然就会面对源代码的版本管理问题。但我却不想为此而安装一个庞大的源代码管理软件,感觉完全没有必要。通常就是直接把项目目录打包,然后在文件名上添加当天日期。正是由于这个原因,这个工具会自动根据目录名称以及当天日期,生成一个合适的压缩包文件名。可以参见前面程序的主界面截图。说明:按F12可以去掉文件名中的日期部分。
5. 更灵活的备份选择,可以将多个目录及多个分区中的某些目录或文件压缩到一个压缩包中。
我的工具还可以将来自于不同磁盘分区的文件打包在一个压缩文件中。操作方法也很简单:直接将需要压缩的文件或者文件夹拖动主窗口中即可,如下图:
程序生成的压缩包用7z打开的界面如下:
6. 可以方便地获取一个目录或文件的完整路径名。
FishCabToolExt.dll中还有一个我经常用到的功能就是:当您在右击一个文件或者文件夹时,可以非常方便地获取它的所在全路径。效果图前面有,请参考前文。
7. 可以方便地从任何目录打开命令行窗口。
我比较喜欢用Windows Server 2003,可是每当以命令行方式执行一些任务时,都要打开【运行】窗口,输入【cmd】后,再切换路径,太麻烦了。 FishCabToolExt.dll中有个功能就可以很轻松地解决这个繁琐的过程。您只需要在Windows资源管理器中右击目录,或者在目录窗口的空白处右击鼠标,点击菜单【从这里打开命令行窗口】就可以了,此时,您会发现,命令行窗口的当前目录就是您需要的目录。效果图前面有,请参考前文。
压缩效果
为了证明我的工具对于源代码目录压缩的效果是有明显改善的,现在我来将我的工具与7-Zip做个比较 。
首先,我要说明一下,7-Zip是目前全球最棒的压缩软件,它有着最高的压缩率。
但它唯一遗憾的是就是 不能自动在压缩时过滤不必要的垃圾文件(相对于源代码来说),因此最终产生的压缩包并不是最小的。
首先,我打开VS2008,创建一个ConsoleApplication,然后不修改任何设置,并写了如下代码:
复制代码 代码如下: