Здравствуйте. Мне нужна сишная библиотека, умеющая распаковывать gzip bzip файлы и zip архивы. Сейчас у меня в проекте использовано 3 отдельных библиотеки, идёт детектирование типа архива и применение соответствующей библиотеки. Хотелось бы единый, универсальный интерфейс. Знаю, что 7z поддерживает кучу форматов, но скачанные сорцы http://downloads.sourceforge.net/sevenzip/7z920.tar.bz2 умеют обрабатывать только 7z архивы. Подскажите, пожалуйста, хорошее решение.
Да, но не через жопу, как это я делаю сейчас. Дело в том, что одни библиотеки умеют работать с файловыми дескрипторами с файловыми потоками, другие нет. Мне для детекта типа архива приходится делать fopen, fread, compare first bytes, fclose, unzOpen... То есть я открываю файл 2 раза: первый для детекта типа архива, второй - непосредственно для декомпрессинга. Патчить библиотеки - не самый хороший вариант по понятным причинам.
Все перечисленные архиваторы имеют интерфейс командной строки. Этот интерфейс у всех одинаков. Только что ключи разные в них засовывать надо. Вот возьми и засунь, с выводом результата в stdout. И через pipe прочитай всё что тебе надо. Или не перенаправляй и не читай, а сразу пиши в файл, если это надо. Удобно, быстро и эффективно.