一个实用的打包/自还原程序

Author: 刘红彦 Date: 1994-06-03

        将几个文件聚合到一个文件本身是比较容易的,但要想该文件自动释放还原就很困难了。主要有两个技术难题。一是怎样正确地将打包程序分离出来;二是怎样使文件自解包。
        第一个难点,可以借助于设计良好的数据结构来解决。打包文件的流行写入格式如下:文件头1,文件内容I,…,文件头n,文件内容n。这里的文件头是常规意义的文件头,而是根据我们要求设计,用以记录文件内容相关信息的特定的数据结构,如可以描述文件名,文件长度,是否密码存储等信息。文件内容即打包文件。这样分离文件时,读一下文件头即可获得相关信息,判断下步走向,正确分离出打包文件。
        第二个问题的实质就是如何将聚合文件制一个可执行文件__单纯聚合在一起的几个文件是肯定不可执行的。简单的实现方法是形成一个exe文件,在此基础上将要打包的文件按前面介绍的存储格式添加到该文件尾部。由于这种处理不破坏exe文件本身,故它仍可执行。这样该文件启动时先SEEK初始文件长度后再开始读取尾部添加内容的文件头,按相关信息指示还原释放出包内文件,即完成自解包。这也是文本、图形等文件档制成可执行文件的一条途径。
        解决了这两个难题,其它一切就好说了。本人按上述思想用TURBO C++1.0编写了打包/自还原程序。它由两个源程序组成,分别编译为EXE文件后即可使用。在AST,DELL,SURIX等机器的PC或MS DOS各版本下测试运行,表现良好。
        PACK是用于文件打包的,其使用格式如下:
        PACK fname1 fname2
        fname1为欲打包文件名,符合DOS命令规则即可,能处理?*等通配符;fname2为打包后形成的可自还原文件名,不应加扩展名。读者应好好分析体会一下程序形成期望的fname2名的可执行文件的方法,相信会有所启发。
        UNPACK是自解包用程序,它是为制作自解包文件服务的。按打包同样原理,我们不难将它和PACK聚合成一个独立的打包/自还原软件。
        本程序加入更多命令行参数,补写几个功能函数后可轻易实现压缩打包,口令解包,处理子目录,备份硬盘,注释聚合文件档,有直接信息浏览,重建原始目录结构等很多强劲功能。本人已实现其中相当部分,工作中代替ARJ,LHA,PKZIP使用,非常顺手。限于篇幅,没有提供其源程序,有兴趣者可来信索要