Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
makskam
1 / 1 / 0
Регистрация: 25.11.2013
Сообщений: 14
#1

С++ упаковка и распаковка файлов Zlib или любой другой способ - C++

29.11.2013, 01:05. Просмотров 2802. Ответов 6
Метки нет (Все метки)

Здравствуйте, возникла такая проблема, немогу упаковать файл и распаковать, пытаюсь использовать Zlib, http://www.zlib.net/manual.html читал вот тут, но всё равно хоть и прочитал ничего не получается, Пытался сначало открыть файл как бинарный а потом записать с помощью gzwrite, но файл который был размером 7 метров(pdf) упаковался в архив 29 байт, не могу разобраться уже 3 дня, если можно приведите примеры упаковки и распоковки, буду очень признателен, помогите пожалуйста вот что пытался сделать
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
#include "zlib.h"
#include <iostream>
#include <fstream>
 
using namespace std;
 
void main()
{
    ifstream in("d:\\10.pdf", ios::in | ios::binary);
    if (!in)
    {
        cout << "Cannot open file" << endl;
        return;
    }
 
    gzFile fi = gzopen("d:\\file.gz","wb");
    gzwrite(fi, in ,strlen("my decompressed data"));
 
    in.close();
    gzclose(fi);
 
    getchar();
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 01:05
Здравствуйте! Я подобрал для вас темы с ответами на вопрос С++ упаковка и распаковка файлов Zlib или любой другой способ (C++):

Упаковка и распаковка даты. - C++
Добрый день. Помогите найти ошибку. А она заключается в том, что число в битовом представлении в сдвиге, получаеться совсем другое, нежели...

Упаковка/распаковка стороннего файла в exe - C++
Добрый день, товарищи и коллеги. Благодаря руководству столкнулся со следующей задачей : Необходимо написать программу, которая...

Упаковка и распаковка групп чисел и вероятность выпадения граней костей - C++
21. Создать программу с функциями упаковки/распаковки группы из 6 чисел диапазона 0..31 (00000..11111) в переменной типа longword...

Зашифровать картинку или любой другой файл XOR шифрованием - C++
Привет. Мне нужно зашифровать картинку, или любой другой файл XOR шифрованием. Как сделать текст я знаю, но вот как картинку? Открывать же...

Выполнить шифрование и дешифрование текста, выбрав любой способ шифрования - C++
Собственно надо - &quot;Выполнить шифрование и дешифрование текста, выбрав любой способ шифрования&quot;. Я написала какое-то подобие Цезаря. Но...

Распаковка PAK Файлов - C++
Есть одна игра, новая Dance - MMO, я все ресурсы игры - модели,картинки тексты и т.д находятся в этом файле. Я пытался открыть этот...

6
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
29.11.2013, 01:54 #2
Попробуйте libzip. Он удобней http://www.nih.at/libzip/ .
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
#include <zip.h>
 
int main()
{
    //Open the ZIP archive
    int err = 0;
    zip *z = zip_open("foo.zip", 0, &err);
 
    //Search for the file of given name
    const char *name = "file.txt";
    struct zip_stat st;
    zip_stat_init(&st);
    zip_stat(z, name, 0, &st);
 
    //Alloc memory for its uncompressed contents
    char *contents = new char[st.size];
 
    //Read the compressed file
    zip_file *f = zip_fopen(z, "file.txt", 0);
    zip_fread(f, contents, st.size);
    zip_fclose(f);
 
    //And close the archive
    zip_close(z);
}
Добавлено через 5 минут
И еще, можете попробовать snappy http://code.google.com/p/snappy/ и LZMA http://www.7-zip.org/sdk.html
0
makskam
1 / 1 / 0
Регистрация: 25.11.2013
Сообщений: 14
29.11.2013, 02:29  [ТС] #3
Скачал Libzip, подключил но при компиляци выдаёт ошибки:
IntelliSense: identifier "uint8_t" is undefined
IntelliSense: identifier "uint64_t" is undefined
IntelliSense: identifier "uint32_t" is undefined
IntelliSense: identifier "uint16_t" is undefined
IntelliSense: identifier "int8_t" is undefined
IntelliSense: identifier "int64_t" is undefined
IntelliSense: identifier "int32_t" is undefined
IntelliSense: identifier "int16_t" is undefined
IntelliSense: cannot open source file "inttypes.h"
Error 1 error C1083: Cannot open include file: 'inttypes.h': No such file or directory

Думаю что не правильно подключил, хотя #include "zip.h" не подчёркивает, как же всё таки правильно подключить?
0
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
29.11.2013, 02:41 #4
Эм...
1) Качаете Cmake http://www.cmake.org/
2) Качаете исходники Zlib
3) Качаете исходники libZip
4) Конфигурируете проект через Cmake для Zlib
5) Компилируете zlib в static билд
6) Конфигурируете проект для libzip через Cmake
7) Компилируете проект libzip.
На этом этапе должны получиться файлы *.lib *.dll (где *. Название того, что получится в результате п. 7).
Далее в VS в настройках проекта C++ =>General=> Additional Include directories пишите путь до *.h файлов.
Далее Linker=>General=> Additional Include directories путь до .lib файлов.
Далее Linker=>Input=>Additional dependencies в конец дописываете .lib файлы.
0
castaway
Эксперт С++
4884 / 3019 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
29.11.2013, 10:22 #5
Вдумайся в то что у тебя написано в 17-й строке и поймешь почему архив получается размером 29 байт.
1
LaVie
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 16
04.04.2014, 13:28 #6
подниму тему
есть Builder 6, полный путь до архива zip, надо из него извлечь конкретный файл xml, который потом парсить. Извлечь xml хотелось бы в поток, а не во временный файл. Подключила zlib
C++
1
2
#include "zlib.h"
#pragma comment (lib, "zlib.lib")
а что дальше делать не знаю, пример на сайте http://www.zlib.net/zlib_how.html мне что-то не помогают.

Буду очень благодарна за пример кода на Builder 6


Пример выше от YouDoItWrong про libzip вроде довольно внятный, но не смогла подключить libzip. Так что за пошаговую инструкцию по его подключению буду тоже очень благодарна.
0
le_
0 / 0 / 0
Регистрация: 03.10.2016
Сообщений: 1
03.10.2016, 16:46 #7
Цитата Сообщение от YouDoItWrong Посмотреть сообщение
1) Качаете Cmake http://www.cmake.org/
2) Качаете исходники Zlib
3) Качаете исходники libZip
4) Конфигурируете проект через Cmake для Zlib
5) Компилируете zlib в static билд
6) Конфигурируете проект для libzip через Cmake
7) Компилируете проект libzip.
На этом этапе должны получиться файлы *.lib *.dll (где *. Название того, что получится в результате п. 7).
Далее в VS в настройках проекта C++ =>General=> Additional Include directories пишите путь до *.h файлов.
Далее Linker=>General=> Additional Include directories путь до .lib файлов.
Далее Linker=>Input=>Additional dependencies в конец дописываете .lib файлы.
Спасибо! Проект скомпилировался работает (в дополнение использовал инструкцию отсюда).
Правда, при запуске приложение требует две библиотеки: zip.dll и zlib.dll. В связи с этим вопрос: как откомпилировать, чтобы было статически (параметр /MT установлен)?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2016, 16:46
Привет! Вот еще темы с ответами:

Скачивание нескольких файлов в архиве и их распаковка - C++
Приветствую. Мне нужно было скачать несколько файлов, чтобы не качать по отдельности я решил запаковать в архив, а после скачки...

Кроссплатформенный способ переноса файлов - C++
Есть какой-нибудь легальный способ кроссплатформенного переноса папок/файлов в C++? Желательно именно способы переноса, а не copy/remove,...

Распаковка и упаковка файлов - Pascal ABC
нужно написать прогу для распаковки и упаковки текстового документа на Паскале АБС

Упаковка/распаковка exe файлов - C#
Поясняю так. Программой 7-zip можно распаковать файл на отдельно манифесты, версии, иконки, ресурсы... Есть ли такие решения написанные...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
03.10.2016, 16:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru