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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ОШИБКА http://www.cyberforum.ru/cpp/thread91688.html
Что за ошибка: Must use c++ for the type iostream??
C++ пропадающее окно ещё раз здраствуйте. в предыдущий теме вы мне помогли http://www.cyberforum.ru/cpp/thread91603.html спасибо большое. но теперь у меня новая проблема. я использовал несколько програм втом числе и эту http://www.cyberforum.ru/cpp/thread89930.html в языке си. ошибок нет, но окно на секундо появляется и исчезает как-бутто эта программа ничего не делает. помогите пожалуйста. http://www.cyberforum.ru/cpp/thread91622.html
C++ Внешние объекты в классе
Если класс исплользует какую то внешнюю переменную (например hWnd), то как будет более корректно его создать: class MyClass { private: HWND* _myWnd; public: MyClass(HWND* extWnd, ...) :_myWnd(extWnd); } Или нормально создать hWnd глобальным и в классе прописать extern?
Выделение памяти C++
MyClass& DXI =* new MyClass(); Это корректный код для выделения памяти, чтобы к переменной можно было обращаться не по ссылке? delete &DXI; Это удалит выделенную память? Кроме того... если MyClass* pDXI; А потом в теле программы где либо: pDXI = new MyClass(); То можно ли в деструкторе класса написать так
C++ Как подключить .h файл дважды? http://www.cyberforum.ru/cpp/thread91267.html
Такая проблема: имеется файл lib.h и еще 2 файла: NewLib1.h и NewLib2.h, в каждый из которых включен предыдущий файл: #include "lib.h" Проблема возникает, когда я компилирую файл program.cpp #include "NewLib1.h" #include "NewLib2.h"
C++ Borland не устанавливается на Windows 7 Borland не устанавливается на Windows 7, в чем может быть проблема?? подробнее

Показать сообщение отдельно
insideone
Модератор
Автор FAQ
3636 / 914 / 49
Регистрация: 10.01.2010
Сообщений: 2,464

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

02.02.2010, 23:42. Просмотров 1651. Ответов 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 вложений
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru