как создать самораспаковывающийся_архив (программно) - PullRequest
0 голосов
/ 10 декабря 2010

Итак, как это сделать?

Как упаковать файлы в самораспаковывающийся_архив. Что такое алгоритм?

Ответы [ 3 ]

6 голосов
/ 10 декабря 2010

Вы можете создавать самораспаковывающиеся архивы для окон с помощью 7-zip , если вы хотите создать их программно, вы можете использовать SDK .

3 голосов
/ 10 декабря 2010

Если вас больше интересуют способы реализовать это самостоятельно: у вас может быть статически связанное приложение, в котором сжатые данные будут связаны с исполняемым файлом (например, в качестве ресурса - для небольших архивов может использоваться простой массив static const char data[]). быть достаточным). Во время выполнения вы передаете данные в библиотеку распаковки, которая затем фактически извлекает файлы.

Чтобы минимизировать накладные расходы на исполняемый файл, я бы постарался использовать системный API (например, простые элементы управления Windows в Windows), чтобы вам не приходилось ссылаться в инструментарии. Кроме того, для распаковки я бы использовал bzip2 , поскольку это обеспечивает хороший компромисс между размером сжатия и скоростью распаковки. Возможно, вы захотите взглянуть на minilzo , поскольку он имеет меньший объем кода, чем bzip2 (поэтому исполняемый файл меньше), и гораздо более высокую скорость распаковки - хотя он и не сжимается.

1 голос
/ 10 декабря 2010

Самораспаковывающийся архив - это просто программа для извлечения, но вместо того, чтобы брать данные из файла архива, он берет их из констант, определенных в самой программе. Это действительно что-то очень простое на концептуальном / алгоритмическом уровне.

Если вам не важен размер, у вас может быть что-то простое, как показано ниже (для простоты приведите пример на python, реальный разархиватор, вероятно, будет скомпилированной программой из источника C или C ++):

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

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

когда вы запускаете его, он создает файл hello.py, который также является исполняемым файлом Python.

Но при создании самораспаковывающегося архива обычно требуется сжатие внутренних данных, чтобы сделать весь архив как можно меньшим. Вы также хотите, чтобы программа-экстрактор была как можно меньше и как можно более независимой от того, что уже доступно в целевой системе ... и именно здесь действительно начинаются проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...