Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/34: Рейтинг темы: голосов - 34, средняя оценка - 4.82
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252

Последовательная запись массива в .gz архив

16.08.2010, 21:37. Показов 7667. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется спосок товаров ввиде массива. Элементы массива перебираю в цикле for и далее необходимо сразу записывать в gzip архив. Нашел вродебы подходящую функцию в библиотеке zlib, к сожалению в инете и здесь на форуме примеров вообще нет, есть только простое описание:
int gzwrite (gzFile file, const voidp buf, unsigned len);
Записывает переданное количество байт несжатых данных в компресованный файл.
Функция gzwrite возвращает реальное количество байт несжатых данных, которое было записано в файл. (0 в случае ошибки).
При этом про установку степени сжатия также ничего не нашел..

Вот мой код записи массива в архив:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "zlib.h"
int main()
{
  gzFile zfp;
  int len;
  zfp = gzopen("myfile.gz","wb");
 
  // Загружаем и обрабатываем массив из базы
 
  for (std::map<int, std::string>::iterator It = Tov.begin(); It != Tov.end(); ++It) { // Перебираем массив
      l = strlen((const char*)It->second); // Вычисляем длину элемента
      gzwrite(zfp,It->second,len); // Записываем в архив "myfile.gz"
      //gzwrite(zfp,"aaa ",4);
  }
}
Проблемы:
1. Не получается посчитать длину элемента, вроде как требует преобразование string в char
2. При компиляции выводит ошибки:
1>test.obj : error LNK2019: ссылка на неразрешенный внешний символ _gzwrite в функции _main
1>test.obj : error LNK2019: ссылка на неразрешенный внешний символ _gzopen в функции _main
Подскажите кто работал с данной библиотекой, как сделать правильно или есть ли больее правильный способ?
Всем спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.08.2010, 21:37
Ответы с готовыми решениями:

Последовательная запись чисел
У меня такой вопрос: как записать в файл шестнадцатеричные числа, чтобы запись была не символов, а чисел. То есть при открытии в блокноте...

Последовательная запись и хранение 4-х байт информации
Имеется логическая схема, у которой на выходе 8 бит (т.е. просто 8 ножек, которые принимают то или иное логическое значение). Нужна...

Последовательная загрузка URL в webbrowser через 10 секунд из массива по таймеру
Что у меня неправильно? у меня в данный момент загружается всегда последний элемент массива using System; using...

29
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
16.08.2010, 21:45
чтобы из std::string получить указатель на char следует пользоваться функцией c_str(). чтобы вычислить длину std::string, надо пользоваться функцией size();
C++
1
2
3
std::string str = "abc";
size_t len = str.size();
gzwrite(zfp, str.c_str(), len);
ошибки указывают скорее всего на то, что вы не подключили саму библиотеку к проекту.
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
17.08.2010, 12:43
При этом про установку степени сжатия также ничего не нашел.
http://www.gzip.org/zlib/manual.html

Opens a gzip (.gz) file for reading or writing. The mode parameter is as in fopen ("rb" or "wb") but can also include a compression level ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for Huffman only compression as in "wb1h". (See the description of deflateInit2 for more information about the strategy parameter.)
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
23.08.2010, 17:29  [ТС]
Помогите собрать эту библиотеку. Я нашел:
Необходимо выполнить: make -f win32/Makefile.bor. После этого соберется библиотека zlib.lib, которую необходимо закинуть в папку с проектом
Как выполнить эту команду в VS2010?
Makefile.bor у меня находится здесь: C:/zlib/win32/Makefile.bor и в самой студии: D:/Microsoft Visual Studio/VC/include/win32/Makefile.bor
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
23.08.2010, 17:35
Union, а в папке с исходниками нету файла make?
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
23.08.2010, 17:37
Цитата Сообщение от Union Посмотреть сообщение
Как выполнить эту команду в VS2010?
Makefile.bor у меня находится здесь: C:/zlib/win32/Makefile.bor и в самой студии: D:/Microsoft Visual Studio/VC/include/win32/Makefile.bor
Бинарники утилиты make (в т.ч. под платформу Win32)
Makefile.bor - это скрипт, к-рый описывает как и чего компилить и с чем линковать.
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
24.08.2010, 15:49  [ТС]
Установил make в директорию C:\GnuWin32
zlib находится в директории C:\zlib
Прописываю строки попорядку:
1. cd C:\zlib\
2. C:\GnuWin32\bin\make.exe -f win32/Makefile.bor
Он мне выдаёт:
del zlib.lib
Не удается найти C:\zlib\zlib.lib
tlib zlib.lib +adler32.obj+compress.obj+crc32.obj+defl ate.obj+gzclose.obj+gzlib.
obj+gzread.obj
process_begin: CreateProcess(NULL, tlib zlib.lib +adler32.obj+compress.obj+crc32
.obj+deflate.obj+gzclose.obj+gzlib.obj+g zread.obj, ...) failed.
make (e=2): ═х єфрхЄё* эрщЄш єърчрээ√щ Їрщы.
make: *** [zlib.lib] ╬°шсър 2
Что я делаю не так? zlib.lib нигде не появился...

В папке zlib ещё есть файл make_vms.com. Попробовал выполнить make через него, но коммандная строка зависла
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
24.08.2010, 22:03
Makefile.bor в студию.
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
25.08.2010, 00:55  [ТС]
Залил отдельно: http://avangard-komi.ru/Makefile.bor

Вообще Zlib я качал отсюда http://zlib.net/, там в архиве все файлы включая win32/Makefile.bor
если нужно, могу тоже поотдельности залить.
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 01:17
Знач так.
1. Страница либы:
http://www.winimage.com/zLibDll/index.html
2. Там находим ссылку для скачивания для Win32 платформы:
http://www.winimage.com/zLibDll/zlib125dll.zip - прямая ссылка.
3. Внимаем комментарию о определении в файле макроса перед инклудом:
Make sure to define ZLIB_WINAPI before including zlib.h. Read contrib\vstudio\readme.txt file whithin zlib123.zip for more information
C++
1
2
#define ZLIB_WINAPI
#include <zlib.h>
4. Используем либо статик версию библиотеки - ок. 600 кб. Или обычную, для неё нужна так же DLLка из соотв. директории.
Не забываем, что разрядность ОС должна совпадать с разрядностью библиотеки - 32 бита или 64.
По самой первой ссылке находим так же архив с хедером (zlib.h):
http://sourceforge.net/project... z/download
Он должен быть той же версии, что и скомпилированные lib/dll файлы.

Будут вопросы - пиши. Всё получиться - пиши тоже
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.08.2010, 02:22
кто-то вменяемый, объясните мне глупцу, вы что специально код усложняете?!
вся задача решается 10ью строками кода(или около того), при использовании boost::iostreams::ofstream в паре с boost::iostreams::zlib_compressor для компрессии(декомпрессии) потока данных, и boost::serialization для сериализации(десериализации) в стандартные плюсовые типы.
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.08.2010, 02:52
niXman, Скорее люди не любят пользоваться Boost постольку поскольку это не стандартная библиотека и без нее во многих вопросах вполне можно обойтись
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.08.2010, 03:00
Цитата Сообщение от Lavroff Посмотреть сообщение
постольку поскольку это не стандартная библиотека
а всякие злибы, и оберткини на ним, и корявые самописные велосипеды, это стандартное?
и еще: в с++0х, почти все, перешло из boost. но самым верхом торжества будет момент, когда наконец-то в стандарт войдет asio.

...нестандартное..хм
0
В астрале
Эксперт С++
 Аватар для ForEveR
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
25.08.2010, 03:03
niXman, Нет всякие злибы и иже с ним конечно не стандартное) Но видимо с бустом тяжело разбираться) Я себе как-то ставил так и стоит до сих пор. Не пришлось еще пользоваться
0
Эксперт С++
 Аватар для niXman
3211 / 1459 / 74
Регистрация: 09.08.2009
Сообщений: 3,441
Записей в блоге: 2
25.08.2010, 03:07
кстати, boost.serialization тоже на рассмотрении по включению в стандарт. а то уже тошно смотреть, как коряво кодеры пишут/читают в/из фалов стандартные типы.

Добавлено через 3 минуты
Lavroff, одно дело, что не получается разобраться. для этого есть форумы. да, по бусту, до сих пор нет бумажных книжек, ни одной(boost.graph не в счет ), это дико удивляет. но ничего, все как-то изучают его и без книжек.
лично я, не представляю, как можно писать что-то серьезное без boost
у меня это первая либа, используемая во всех проектах. как на работе, так и дома.
0
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
25.08.2010, 16:05  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#define ZLIB_WINAPI
#include <zlib.h>
 
int main()
{
   int i=0;
   gzFile zfp; // Указатель на файл
   zfp = gzopen("myfile.gz","wb9"); // Открываем файл, устанавлиаем степень сжатия 9
   for (i=0;i<20;i++){ // 20 повторяем
    gzwrite(zfp,"1234 ",5); // записываем в zfp строку "1234  " длиной 5 символов
   }
   gzclose(zfp); // Закрываем файл
   return 0;
}
Из первого архива взял файл static32/zlibstat.lib - винда 32 бита
Из архива, ссылкой выше взял zlib.h, zconf.h ну и + распаковал его полностью в Microsoft Visual Studio\VC\include
Папка с проектом выглядит вот так:

При компиляции:
1>------ Перестроение всех файлов начато: проект: zlibpr, Конфигурация: Debug Win32 ------
1>Построение начато 25.08.2010 16:00:44.
1>_PrepareForClean:
1> Файл "Debug\zlibpr.lastbuildstate" удаляется.
1>InitializeBuildStatus:
1> Обращение к "Debug\zlibpr.unsuccessfulbuild".
1>ClCompile:
1> zlibpr.cpp
1> stdafx.cpp
1> Создание кода...
1>zlibpr.obj : error LNK2019: ссылка на неразрешенный внешний символ _gzclose@4 в функции _main
1>zlibpr.obj : error LNK2019: ссылка на неразрешенный внешний символ _gzwrite@12 в функции _main
1>zlibpr.obj : error LNK2019: ссылка на неразрешенный внешний символ _gzopen@8 в функции _main
1>d:\мои документы\visual studio 2010\Projects\zlibpr\Debug\zlibpr.exe : fatal error LNK1120: 3 неразрешенных внешних элементов
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:01.79
========== Перестроение всех: успешно: 0, с ошибками: 1, пропущено: 0 ==========
Данные функции описаны здесь: http://zlib.net.ru/

В общем что-то не так сделал...


niXman, да у меня проблемы с подключением zlib'ы, с бустом думаю будет ещё запарнее
Для пшп в инете дофига русских сайтов-каталогов с подробным описанием функций и примерами. У си есть только этот форум + .com, на которых есть далеко не всё и невсегда всё понятно начинающему.
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 16:14
Цитата Сообщение от Union Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "stdafx.h"
#define ZLIB_WINAPI
#include <zlib.h>
 
int main()
{
   int i=0;
   gzFile zfp; // Указатель на файл
   zfp = gzopen("myfile.gz","wb9"); // Открываем файл, устанавлиаем степень сжатия 9
   for (i=0;i<20;i++){ // 20 повторяем
    gzwrite(zfp,"1234 ",5); // записываем в zfp строку "1234  " длиной 5 символов
   }
   gzclose(zfp); // Закрываем файл
   return 0;
}
Из первого архива взял файл static32/zlibstat.lib - винда 32 бита
Из архива, ссылкой выше взял zlib.h, zconf.h ну и + распаковал его полностью в Microsoft Visual Studio\VC\include
Папка с проектом выглядит вот так:

При компиляции:

Данные функции описаны здесь: http://zlib.net.ru/

В общем что-то не так сделал...
В проекте подлинкуй библиотеку:
Project->Options->Linker->Additional dependencies:
zlibstat.lib

либо в коде допиши
C++
1
#pragma comment( lib, "zlibstat" )
Второй вариант работает только для майкрософтовского компилятора (читай - только в вижуал студии).
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
25.08.2010, 16:25  [ТС]
Добавил: #pragma comment( lib, "zlibstat" )

1>libcmt.lib(crt0dat.obj) : error LNK2005: __initterm_e уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(crt0dat.obj) : error LNK2005: _exit уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(crt0dat.obj) : error LNK2005: __exit уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(crt0dat.obj) : error LNK2005: __cexit уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(crt0dat.obj) : error LNK2005: __amsg_exit уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(invarg.obj) : error LNK2005: __invoke_watson уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(hooks.obj) : error LNK2005: "void __cdecl terminate(void)" (?terminate@@YAXXZ) уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_a уже определен в MSVCRTD.lib(cinitexe.obj)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xi_z уже определен в MSVCRTD.lib(cinitexe.obj)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_a уже определен в MSVCRTD.lib(cinitexe.obj)
1>libcmt.lib(crt0init.obj) : error LNK2005: ___xc_z уже определен в MSVCRTD.lib(cinitexe.obj)
1>libcmt.lib(crt0.obj) : error LNK2005: _mainCRTStartup уже определен в MSVCRTD.lib(crtexe.obj)
1>libcmt.lib(errmode.obj) : error LNK2005: ___set_app_type уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(mlock.obj) : error LNK2005: __unlock уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(mlock.obj) : error LNK2005: __lock уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(winxfltr.obj) : error LNK2005: __XcptFilter уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>libcmt.lib(setlocal.obj) : error LNK2005: __configthreadlocale уже определен в MSVCRTD.lib(MSVCR100D.dll)
1>LINK : warning LNK4098: библиотека по умолчанию "MSVCRTD" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library
1>MSVCRTD.lib(cinitexe.obj) : warning LNK4098: библиотека по умолчанию "libcmt.lib" противоречит использованию других библиотек; используйте параметр /NODEFAULTLIB:library
1>d:\мои документы\visual studio 2010\Projects\zlibpr\Debug\zlibpr.exe : fatal error LNK1169: обнаружен многократно определенный символ - один или более
1>
1>СБОЙ построения.
вообще не пойму, яж не подключал libcmt.lib и MSVCRTD.lib, откуда они взялись?
Прописал вот это:
C++
1
2
#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib") 
#pragma comment(linker, "/NODEFAULTLIB:libcmt.lib")
Ошибок стало ещё больше
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 16:32
Цитата Сообщение от Union Посмотреть сообщение
Не пойму, яж такие не подключал, откуда они взялись?
По-умолчанию, в проекте есть уже подключённые стандартные библиотеки винды.
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
25.08.2010, 16:34  [ТС]
Andrew_Lvov вот уже ищу в долбаном русском интерфейсе где что находится
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.08.2010, 16:34
Помогаю со студенческими работами здесь

Прямая запись в zip-архив
Не подскажите чуток примерно с какими командами работать и есть ли такая возможность записать объект image или bitmap сразу в zip архив с...

Запись файлов в img-архив
Всем привет! У меня такая задача. Мне нужно сделать прогу с автоустановкой моделей автомобилей в gta3.img(А-ЛЯ GTA San Andreas). Кто...

Упаковка в архив (с использованием пароля на архив) и отправка по почте
Помогите с написанием макроса, который будет упаковывать книгу в архив (книга по-умолчанию сохраняется в одну и ту же директорию),...

Как открыть архив DB? Не база данных, а архив с документами
Подскажите, как можно открыть файл .DB? Файл запаролен и не открывается ни парадоксом, ни дельфи. ТОчно уверен, что это архив.

Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран
1.Ввод с клавиатуры и запись в файл, чтение из файла и запись в массив, вывод из массива на экран 2.Ввод с клавиатуры и запись в массив,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru