gzip bzip zip декомпрессор

Тема в разделе "LANGS.C", создана пользователем srm, 16 июн 2011.

  1. srm

    srm New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2011
    Сообщения:
    189
    Здравствуйте. Мне нужна сишная библиотека, умеющая распаковывать gzip bzip файлы и zip архивы. Сейчас у меня в проекте использовано 3 отдельных библиотеки, идёт детектирование типа архива и применение соответствующей библиотеки. Хотелось бы единый, универсальный интерфейс. Знаю, что 7z поддерживает кучу форматов, но скачанные сорцы http://downloads.sourceforge.net/sevenzip/7z920.tar.bz2 умеют обрабатывать только 7z архивы. Подскажите, пожалуйста, хорошее решение.
     
  2. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    единый интерфейс будет определять тип архива и разжимать т.е. делать тоже самое
     
  3. srm

    srm New Member

    Публикаций:
    0
    Регистрация:
    14 июн 2011
    Сообщения:
    189
    Да, но не через жопу, как это я делаю сейчас. Дело в том, что одни библиотеки умеют работать с файловыми дескрипторами с файловыми потоками, другие нет. Мне для детекта типа архива приходится делать fopen, fread, compare first bytes, fclose, unzOpen... То есть я открываю файл 2 раза: первый для детекта типа архива, второй - непосредственно для декомпрессинга. Патчить библиотеки - не самый хороший вариант по понятным причинам.
     
  4. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Все перечисленные архиваторы имеют интерфейс командной строки. Этот интерфейс у всех одинаков. Только что ключи разные в них засовывать надо. Вот возьми и засунь, с выводом результата в stdout. И через pipe прочитай всё что тебе надо. Или не перенаправляй и не читай, а сразу пиши в файл, если это надо. Удобно, быстро и эффективно.
     
  5. Psionic

    Psionic Member

    Публикаций:
    0
    Регистрация:
    25 сен 2008
    Сообщения:
    156
    zlib не пробывли? Она покрайней мере поддерживает 2 формата из ваших троих.