如何创建自解压存档(以编程方式)

时间:2010-12-10 12:59:38

标签: c++ algorithm

那么,怎么做呢?

如何将文件打包为self-extracted_archive。算法是什么?

3 个答案:

答案 0 :(得分:6)

您可以使用7-zip为Windows创建自解压存档,如果您想以编程方式创建它们,可以使用SDK

答案 1 :(得分:3)

如果您对自己实现此方法的方式更感兴趣:您可以拥有一个静态链接的应用程序,该应用程序将压缩数据链接到可执行文件中(例如,作为资源),用于较小的存档static const char data[]数组可能就足够了)。在运行时,您将数据提供给解压缩库,然后实际提取文件。

为了保持可执行文件的开销很小,我尝试使用系统API(例如Windows上的普通WIndows控件),以便您不必链接到工具箱中。此外,对于解压缩,我会使用bzip2,因为它在压缩大小和解压缩速度之间提供了良好的折衷。您可能还需要查看minilzo,因为它的代码占用空间比bzip2小(因此可执行文件较小)并且解压速度要高得多 - 但它也不会压缩。

答案 2 :(得分:1)

自解压存档只是一些提取程序,但不是从存档文件中获取数据,而是从程序本身定义的常量中获取。这在概念/算法层面上非常简单。

如果你不关心大小,你可以拥有如下简单的东西(例如在python中为了保持简单,实际的unarchiver可能是来自C或C ++源代码的编译程序):

hello_prog = """print "Hello, World"\n""";

f = file("./hello.py", "w");
f.write(hello_prog);
f.close();

当你运行它时,它会创建一个文件hello.py,它也是一个python可执行文件。

但实际创建自动解压缩存档时,通常需要压缩内部数据,以使整个存档尽可能小。您还希望保持提取器程序尽可能小,并尽可能独立于目标系统上已有的......以及问题真正开始的地方。