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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
makskam
1 / 1 / 0
Регистрация: 25.11.2013
Сообщений: 14
29.11.2013, 01:05     С++ упаковка и распаковка файлов Zlib или любой другой способ #1
Здравствуйте, возникла такая проблема, немогу упаковать файл и распаковать, пытаюсь использовать 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();
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
29.11.2013, 01:54     С++ упаковка и распаковка файлов Zlib или любой другой способ #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
makskam
1 / 1 / 0
Регистрация: 25.11.2013
Сообщений: 14
29.11.2013, 02:29  [ТС]     С++ упаковка и распаковка файлов Zlib или любой другой способ #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" не подчёркивает, как же всё таки правильно подключить?
YouDoItWrong
46 / 46 / 7
Регистрация: 29.10.2011
Сообщений: 154
29.11.2013, 02:41     С++ упаковка и распаковка файлов Zlib или любой другой способ #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 файлы.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
29.11.2013, 10:22     С++ упаковка и распаковка файлов Zlib или любой другой способ #5
Вдумайся в то что у тебя написано в 17-й строке и поймешь почему архив получается размером 29 байт.
LaVie
0 / 0 / 0
Регистрация: 11.03.2014
Сообщений: 16
04.04.2014, 13:28     С++ упаковка и распаковка файлов Zlib или любой другой способ #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. Так что за пошаговую инструкцию по его подключению буду тоже очень благодарна.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.10.2016, 16:46     С++ упаковка и распаковка файлов Zlib или любой другой способ
Еще ссылки по теме:

Быстрый способ сравнить содержимое двух файлов C++
Зашифровать картинку или любой другой файл XOR шифрованием C++
C++ Упаковка/распаковка стороннего файла в exe

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

Или воспользуйтесь поиском по форуму:
le_
0 / 0 / 0
Регистрация: 03.10.2016
Сообщений: 1
03.10.2016, 16:46     С++ упаковка и распаковка файлов Zlib или любой другой способ #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 установлен)?
Yandex
Объявления
03.10.2016, 16:46     С++ упаковка и распаковка файлов Zlib или любой другой способ
Ответ Создать тему
Опции темы

Текущее время: 18:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru