Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ОШИБКА Что за ошибка: Must use c++ for the type iostream?? https://www.cyberforum.ru/ cpp/ thread91688.html C++ пропадающее окно
ещё раз здраствуйте. в предыдущий теме вы мне помогли https://www.cyberforum.ru/cpp/thread91603.html спасибо большое. но теперь у меня новая проблема. я использовал несколько програм втом числе и эту...
C++ Внешние объекты в классе Если класс исплользует какую то внешнюю переменную (например hWnd), то как будет более корректно его создать: class MyClass { private: HWND* _myWnd; public: MyClass(HWND* extWnd, ...)... https://www.cyberforum.ru/ cpp/ thread91506.html C++ Выделение памяти https://www.cyberforum.ru/ cpp/ thread91503.html
MyClass& DXI =* new MyClass(); Это корректный код для выделения памяти, чтобы к переменной можно было обращаться не по ссылке? delete &DXI; Это удалит выделенную память? Кроме того... если ...
Как подключить .h файл дважды? C++
Такая проблема: имеется файл lib.h и еще 2 файла: NewLib1.h и NewLib2.h, в каждый из которых включен предыдущий файл: #include "lib.h" Проблема возникает, когда я компилирую файл...
C++ Borland не устанавливается на Windows 7 https://www.cyberforum.ru/ cpp/ thread91227.html
Borland не устанавливается на Windows 7, в чем может быть проблема??
C++ Работа с другим консольным приложением https://www.cyberforum.ru/ cpp/ thread90817.html
у меня есть консольное приложение, которое выводит информацию на экран мне нужно написать программу которая запускала бы это приложение и считывала информацию с экрана Есть идеи? Заранее спасибо!
ifstream / ofstream C++
Доброго времени суток. И сразу к проблеме. Делаю вывод в файл объектов класса для их последующего считывания и обрабатывания. ofstream fout ("test.txt", ios::binary); fout.write((char*)...
C++ Создание дерева в родительском классе Базовый класс используется для создания дерева. Потомки обрабатывают дерево по разному. class A { public: A() { loadTree(); } loadTree() https://www.cyberforum.ru/ cpp/ thread90740.html C++ Генератор судоку Маленькая проблемка с программой - в одном из 10 случаев программа зависает. Кому не сложно, прошу проверить и исправить. Вот полный работающий код: #include <iostream> #include <cstdlib>... https://www.cyberforum.ru/ cpp/ thread90576.html
C++ Новый стандарт с++
В 2009 году должен быть выйти новый стандарт. Хотелось бы узнать какие новшевства он принес в язык. Стал язык удобнее или нет. И какие компиляторы уже на данный момент поддерживают этот стандарт. ...
C++ С++ vs. Visual Studio C++! https://www.cyberforum.ru/ cpp/ thread90415.html
В чем разница между C++ и Visual Studio C++??
Автор FAQ
3684 / 961 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
0

zlib Двойное архивирование\разархивирование - C++ - Ответ 521603

02.02.2010, 23:42. Показов 2175. Ответов 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 вложений

Вернуться к обсуждению:
zlib Двойное архивирование\разархивирование C++
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, который позволяет...

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