2012-06-21 3 views
1

В настоящее время я изучаю C, и у меня возникают некоторые проблемы с попыткой создать небольшую программу, которая использует zlib.Использование zlib с C

Мне удалось скомпилировать мое приложение (используя Codeblocks/MinGW) с библиотеками zlib, а компиляция работает нормально. Я использовал пример, основанный на примере zpipe.c, найденном на официальном сайте zlib (zlib.net).

При выполнении создается выходной файл zip, но он кажется неправильным и/или пустым. Я не могу открыть его с помощью 7zip.

Вот код, который я изменил. Я просто заменил функцию main() в zpipe.c.

int main() { 
    printf("Compression test..."); 

    int ret; 
    FILE *fpsource; 
    FILE *fpdest; 

    fpsource = fopen("test.txt", "rb"); 
    fpdest = fopen("output.zip", "wb"); 

    ret = def(fpsource, fpdest, Z_DEFAULT_COMPRESSION); 
    if (ret != Z_OK) { 
     printf("failure\n"); 
     zerr(ret); 
    } 
    else { 
     printf("success..\n"); 
    } 

    fclose(fpsource); 
    fclose(fpdest); 

    return EXIT_SUCCESS; 
} 

У меня нет ошибок, и мое сообщение «Успех» напечатано. Это только файл вывода поврежден.

+0

Что делает 7zip при открытии файла? – CharlesB

+0

@ H2CO3, на POSIX, 'EXIT_SUCCESS' определяется как' 0' AFAIK, но это может быть и другое значение ... – Nim

+0

@CharlesB Просто общий «Не удается открыть файл« output.zip »в качестве архива». –

ответ

3

zpipe.c as-is будет генерировать zlib-формат, который представляет собой необработанные данные дефляции, завернутые в заголовок zlib и трейлер. 7zip этого не узнает. Он будет распознавать формат gzip или zip, которые являются полностью разными обертками в тех же самых сырых данных дефляции.

Вы можете изменить zpipe.c для использования deflateInit2 (и inflateInit2) вместо версий без «2», чтобы выбрать формат gzip вместо формата zlib. Вы можете прочитать zlib.h, как это сделать.

+0

Ответ от одного из авторов zlib! – ydroneaud

4

Рассматриваемый код просто сжимает файл с использованием алгоритма DEFLATE. Отсутствуют соответствующие структуры, которые делают его zip-файлом или gzip-файлом.

Смежные вопросы