Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
 
Автор FAQ
3683 / 960 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
1

zlib Двойное архивирование\разархивирование

02.02.2010, 23:42. Показов 2164. Ответов 0
Метки нет (Все метки)

Использую библиотеку zlib 1.2.3
Нужно сохранять массив объектов в файл и потом загружать её. Вес - 10 мегабайт. Решил сжать перед записью. Сделал... обнаружил что уже сжатый файл тоже бы мог сжаться хорошенько (60кб). Сжал кое как... получил 6кб. Отлично... Пытаюсь разжать дважды. Что то выходит, однако тест загруженого массива объектов в реальной программе показывает баги (этот массив используется для того чтобы рендер понимал что рисовать на экране).

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
void SaveData(const char* FileName, void* Data, unsigned long Size)
{
    unsigned long CompressedSize = Size + 0.1*Size + 24;
    unsigned char* BufferOne = new unsigned char[CompressedSize];
    compress(BufferOne, &CompressedSize, (const Bytef *)Data, Size);
 
    Size = CompressedSize;
    CompressedSize = CompressedSize + 0.1*CompressedSize + 24;
    unsigned char* BufferTwo = new unsigned char[CompressedSize];
    compress(BufferTwo, &CompressedSize, (const Bytef *)BufferOne, Size);
 
    std::ofstream os(FileName, std::ios::binary);
    os.write(reinterpret_cast<const char*>(BufferTwo),CompressedSize);
    os.close();
 
    delete[] BufferOne;
    delete[] BufferTwo;
}
 
void LoadData(const char* FileName, void* Data, unsigned long Size)
{
    // Фаил открывается на чтение
    HANDLE hFile=CreateFile(FileName,GENERIC_ALL,3,(LPSECURITY_ATTRIBUTES) NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,(HANDLE)NULL);
    DWORD FileSize=GetFileSize(hFile,0);
    CloseHandle(hFile);
 
    std::ifstream is(FileName, std::ios::binary);
    is.read(reinterpret_cast<char*>(Data),Size);
 
    // Предпологаемый размер разархивированых данных
    // Берем чуть больше чем размер структуры в которую загружаем
    // на всякий случай
    unsigned long UncompressedSize = Size + Size * 0.1;
    Bytef* Buffer = new Bytef[UncompressedSize];
    uncompress(Buffer, &UncompressedSize, (const Bytef *)Data, FileSize);
 
    uncompress((Bytef*)Data, &Size, Buffer, UncompressedSize);
 
    is.close();
 
    delete [] Buffer;
}
Если кто то работал с zlib... может я что то не так делаю?

Добавлено через 32 минуты
Вопрос снимается. Рендеру нужны были ещё кое какие данные для полного переноса информации этого массива объектов... Код рабочий Странно что после первого сжатия такое... наверное алгоритм не очень хороший... а то я себе прям так и представляю в сети все бы выкладывали архив в архив и так матрешка до 30 вложений
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2010, 23:42
Ответы с готовыми решениями:

Архивирование и разархивирование ZIP архивов
Здравствуйте! Долго уже ищу, но не могу найти подходящего. Пробовал zLib - ничего не понял даже...

Архивирование/разархивирование RAR и ZIP архивов.
Подскажите, как можно из своей програмы на VB архивировать/разархивировать (rar, zip) файлы?

Архивирование/разархивирование RAR и ZIP архивов.
Подскажите, как можно из своей програмы на VB архивировать/разархивировать (rar, zip) файлы?

Разархивирование
Здравствуйте. Помогите, плиз. Есть папка D:\RAR. в ней много архивов. Как разархивировать их в...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.02.2010, 23:42

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Разархивирование Zip
https://www.cyberforum.ru/qt/thread450074.html#post3355459 QZip Выдает 120 ошибок в стиле...

Разархивирование rar архива
Подскажите как разархивировать rar архив с ключами, я пытаюсь сделать так procedure...

Открепление и разархивирование файла
Здравствуйте! Я не разу не писал на lotus. Мне нужно сделать агента который бы при получении...

DotNetZip разархивирование с ProgressBar
Всем хорошего настроения Я с вопросами. Работаю с DotNetZip, который позволяет...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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