Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
bigsmall20

Zlib

28.03.2013, 01:30. Показов 1357. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При вызове функции inflate, возвращается значение Z_DATA_ERROR. На вход подается zip файл. Непонятно почему не работает эта функция. Может я неправильно что-то инициализирую?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#include "stdafx.h"
 
#pragma comment(lib, "zdll.lib")
 
#pragma pack(push,1)    // выравнивание по границе 1 байт
struct LocalFileHeader{
 
    unsigned int lfhSignature;     // local file header signature 0x04034b50
    unsigned short  vntExtract;       // version needed to extract
    unsigned short  gpbFlag;            // general purpose bit flag
    unsigned short  cMethod;            // compression method
    unsigned short  lmfTime;          // last mod file time
    unsigned short  lmfDate;          // last mod file date
    unsigned int crc32;            // CRC-32
    unsigned int cSize;        // compressed size
    unsigned int uSize;        // uncompressed size
    unsigned short fnLength;        // filename length
    unsigned short efLength;        // extra field length
 
    char* fName;        // filename (variable size)
    char* eField;        // extra field (variable size)
 
}; // local file header
#pragma pack(pop)   //отмена выравнивания
 
 
//header of descriptor 0x08074b50
#pragma pack(push,1)
struct DataDescriptor{
 
    unsigned int descSignature; //0x08074b50
    unsigned int crc32;        // CRC-32
    unsigned int cSize;        // compressed size
    unsigned int uSize;        // uncompressed size
 
};
#pragma pack(pop)
 
int decompress(char *inFile, char *outFile)
{
    FILE* hFile = fopen(inFile, "rb");
    if(!hFile){
        printf("Incorrect file name");
        getch();
        return 0;
    }
 
    FILE* fw = fopen(outFile, "wb");
 
    unsigned int sign = 0;
    LocalFileHeader LFH;
 
 
    while(true)
    {
        fread(&sign, 1, 4, hFile);
        if(sign == 0x04034b50)
        {
            fseek(hFile, -4, SEEK_CUR);
 
            fread(&LFH, 1, 30, hFile);
            LFH.fName = new char[LFH.fnLength+1];
            fread(LFH.fName, 1, LFH.fnLength, hFile);
            char *wordDoc = new char[LFH.fnLength+1];
            memcpy(wordDoc, "word/document.xml", 17);
 
            
            if(strcmp(wordDoc, LFH.fName) == 0)
            {
 
                Bytef *data= new Bytef[LFH.cSize+1];
                Bytef *dest = new Bytef[LFH.uSize+1];
                fread(data, LFH.cSize, 1, hFile);
                fwrite(data, LFH.cSize, 1, fw);
 
                z_stream stream;
                stream.zalloc = Z_NULL;
                stream.zfree = Z_NULL;
                stream.opaque = (voidpf)0;
                stream.avail_in = LFH.cSize;
 
                stream.next_in = data;
                stream.next_out = dest;
 
 
                if(Z_OK == inflateInit(&stream))
                    printf("init OK\n");
                if(Z_DATA_ERROR == inflate(&stream, Z_FINISH))
                    printf("Data error");
 
                fwrite(dest, LFH.uSize, 1, fw);
 
                delete [] dest;
                delete [] data;
                fclose(fw);
            }
        }
 
        if(feof(hFile))
        {
            getch();
            return 0;
        }
 
        fseek(hFile, -3, SEEK_CUR);
    }
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    char *inFile = "in.docx";
    char *outFile = "out.txt";
 
    decompress(inFile, outFile);
 
    return 0;
}
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.03.2013, 01:30
Ответы с готовыми решениями:

ZLib
Хай. Вобщем проблема такая: Нужно реализовать прогу архивации/разархивации, из нескольких либ выбрал ZLib`у, и тут то гемор, облазил кучу...

Использование Zlib
Здравствуйте, уважаемые господа. Начал разбираться с Zlib, однако так и не встретил норм примера записи и чтения данных из файла. ...

Api zlib
Доброе утро. Помогите найти описание api от zlib, желательно на русском

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.03.2013, 01:30
Помогаю со студенческими работами здесь

Что делать с Zlib?
Хочу установить библиотеку, но для ее работы нужна также zlib. "download the zlib library which matches your compiler and link it to your...

Не получается расшифровать zlib
Строка заширована zlib с параметрами по умолчания, написана программа для декодировки, но неверный ответ дает(какие то иероглифы в том...

Как пользоваться Zlib'om
Скачал 1.2.8 версию с сайта для Delphi провел .pas через билдера, получил .hpp Подключаю: #include "ZLibEx.hpp" #include...

Установка библиотеки zlib
До сих пор ни разу не было необходимости в установке библиотек. Первой стала zlib и возникли вопросы по поводу её установки. Наткнулся в...

Как распаковать архив ZLib C++
Даже в документации офф. сайта, и в и примере ничего не понятно. Надо написать класс для распаковки zip архива на основе ZLib, с методом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru