Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252

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

16.08.2010, 21:37. Показов 8032. Ответов 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
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 16:37
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Union Посмотреть сообщение
Добавил: #pragma comment( lib, "zlibstat" )


вообще не пойму, яж не подключал libcmt.lib и MSVCRTD.lib, откуда они взялись?
Прописал вот это:
C++
1
2
#pragma comment(linker, "/NODEFAULTLIB:MSVCRTD.lib") 
#pragma comment(linker, "/NODEFAULTLIB:libcmt.lib")
Ошибок стало ещё больше
Вот эти прагма коммент таки уберите.
НоуДефолтЛиб добавляете согласно инструкции:
http://msdn.microsoft.com/en-u... S.80).aspx
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
25.08.2010, 16:42  [ТС]
Тоже самое, появляются другие ошибки:
1>------ Построение начато: проект: zlibpr, Конфигурация: Debug Win32 ------
1>Построение начато 25.08.2010 16:40:24.
1>InitializeBuildStatus:
1> Обращение к "Debug\zlibpr.unsuccessfulbuild".
1>ClCompile:
1> Для всех выходных данных обновления не требуется.
1>ManifestResourceCompile:
1> Для всех выходных данных обновления не требуется.
1>zlibpr.obj : error LNK2019: ссылка на неразрешенный внешний символ __RTC_CheckEsp в функции _main
1>zlibpr.obj : error LNK2001: неразрешенный внешний символ "__RTC_Shutdown"
1>zlibpr.obj : error LNK2001: неразрешенный внешний символ "__RTC_InitBase"
1>LINK : error LNK2001: неразрешенный внешний символ "_mainCRTStartup"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ _free в функции _gz_init
1>zlibstat.lib(gzlib.obj) : error LNK2001: неразрешенный внешний символ "_free"
1>zlibstat.lib(gzread.obj) : error LNK2001: неразрешенный внешний символ "_free"
1>zlibstat.lib(zutil.obj) : error LNK2001: неразрешенный внешний символ "_free"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ _malloc в функции _gz_init
1>zlibstat.lib(gzlib.obj) : error LNK2001: неразрешенный внешний символ "_malloc"
1>zlibstat.lib(gzread.obj) : error LNK2001: неразрешенный внешний символ "_malloc"
1>zlibstat.lib(zutil.obj) : error LNK2001: неразрешенный внешний символ "_malloc"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ _strerror в функции _gz_comp
1>zlibstat.lib(gzread.obj) : error LNK2001: неразрешенный внешний символ "_strerror"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ __errno в функции _gz_comp
1>zlibstat.lib(gzread.obj) : error LNK2001: неразрешенный внешний символ "__errno"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ _write в функции _gz_comp
1>OLDNAMES.lib(write.obj) : error LNK2001: неразрешенный внешний символ "_write"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ _memset в функции _gz_zero
1>zlibstat.lib(deflate.obj) : error LNK2001: неразрешенный внешний символ "_memset"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ _memcpy в функции _gzwrite@12
1>zlibstat.lib(gzread.obj) : error LNK2001: неразрешенный внешний символ "_memcpy"
1>zlibstat.lib(deflate.obj) : error LNK2001: неразрешенный внешний символ "_memcpy"
1>zlibstat.lib(inflate.obj) : error LNK2001: неразрешенный внешний символ "_memcpy"
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ __vsnprintf в функции _gzprintf
1>zlibstat.lib(gzwrite.obj) : error LNK2019: ссылка на неразрешенный внешний символ _close в функции _gzclose_w@4
1>zlibstat.lib(gzread.obj) : error LNK2001: неразрешенный внешний символ "_close"
1>OLDNAMES.lib(close.obj) : error LNK2001: неразрешенный внешний символ "_close"
1>zlibstat.lib(gzlib.obj) : error LNK2019: ссылка на неразрешенный внешний символ _lseek в функции _gzoffset64@4
1>OLDNAMES.lib(lseek.obj) : error LNK2001: неразрешенный внешний символ "_lseek"
1>zlibstat.lib(gzlib.obj) : error LNK2019: ссылка на неразрешенный внешний символ _open в функции _gz_open
1>OLDNAMES.lib(open.obj) : error LNK2001: неразрешенный внешний символ "_open"
1>zlibstat.lib(gzlib.obj) : error LNK2019: ссылка на неразрешенный внешний символ _sprintf в функции _gzdopen@8
1>zlibstat.lib(gzread.obj) : error LNK2019: ссылка на неразрешенный внешний символ _read в функции _gz_load
1>OLDNAMES.lib(read.obj) : error LNK2001: неразрешенный внешний символ "_read"
1>zlibstat.lib(gzread.obj) : error LNK2019: ссылка на неразрешенный внешний символ _memchr в функции _gzgets@12
1>OLDNAMES.lib(write.obj) : error LNK2001: неразрешенный внешний символ "__write"
1>OLDNAMES.lib(close.obj) : error LNK2001: неразрешенный внешний символ "__close"
1>OLDNAMES.lib(lseek.obj) : error LNK2001: неразрешенный внешний символ "__lseek"
1>OLDNAMES.lib(open.obj) : error LNK2001: неразрешенный внешний символ "__open"
1>OLDNAMES.lib(read.obj) : error LNK2001: неразрешенный внешний символ "__read"
1>d:\мои документы\visual studio 2010\Projects\zlibpr\Debug\zlibpr.exe : fatal error LNK1120: 23 неразрешенных внешних элементов
1>
1>СБОЙ построения.
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 16:44
Попробуйте NODEFAULTLIB только с одной из тех двух библиотек, потом с другой.
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
25.08.2010, 16:49  [ТС]
Всё, заработало
NODEFAULTLIB MSVCRTD.lib помогло! Andrew_Lvov спасибо Вам огромное!
Я думаю это первый рабочий пример записи в gz на этом форуме
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 16:49
А, блин, да. Попробуй обычную zlib, а не static. То есть из другой директории, перекинь .lib и .dll.
И не забудь в свойствах проекта или в коде исправить линкование zlib.lib вместо zlibstat.lib.

UPD: Ну тогда оставьте выше совет как альтернативный вариант
1
 Аватар для Union
17 / 17 / 0
Регистрация: 16.08.2010
Сообщений: 252
25.08.2010, 17:00  [ТС]
А NODEFAULTLIB:MSVCRTD.lib может впоследствии повлиять на какие-то функции? Выгладит как-то неправильно менять параметры одной библиотеки для другой

а то в моей программе появились такие:
1>pinger.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__atof в функции _main
1>pinger.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp__system в функции _main
1>pinger.obj : error LNK2019: ссылка на неразрешенный внешний символ __imp___time64 в функции _time
0
Эксперт С++
 Аватар для Andrew_Lvov
261 / 191 / 10
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 17:06
Цитата Сообщение от Union Посмотреть сообщение
А NODEFAULTLIB:MSVCRTD.lib может впоследствии повлиять на какие-то функции?

а то в моей программе появились такие:
Попробуйте zlib.lib+zlib.dll вместо zlibstat.lib.
Там ещё закос может быть из-за того, что либа скомпилирована под мультипоточность, а другие - однопоточные.
Поэтому, в свойствах проекта поищите также настройку компиляции (либо линковки) однопоточную/многопоточную (/MT), поиграйтесь с этим параметром. Неплохо после таких изменений делать полный rebuild.
0
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
26.06.2011, 22:44
Я нашел функции compress и decompress
А как осуществить decode и encode?

(decode и encode - это сжатие и добавление заголовков, -> получается полноценный архив, а не просто сжатая строка)
gzwrite не подходит, т.к. пишет сразу на винчестер, а мне нужно сохдать в памяти, чтобы потом по сети передать на локальный сервер
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
26.06.2011, 22:50
Цитата Сообщение от Kadet89 Посмотреть сообщение
не подходит, т.к. пишет сразу на винчестер, а мне нужно сохдать в памяти, чтобы потом по сети передать
а чем не подходит вариант сохранения на винчестер, передачи по сети и удаления с винчестера?
0
2 / 2 / 0
Регистрация: 18.09.2009
Сообщений: 107
27.06.2011, 00:18
Это совсем неправильно, получится носилование винчестер зазря..., а он и так перегружен, держет большую базу с постоянной высокой нагрузкой... принципиально не люблю костыли

Добавлено через 40 минут
Попробовал вручную заголовок воткнуть, но ничего не вышло
Там информация о размере непонятно куда вписывается... в общем нужно точно знать структуру.
Не подскажете как можно всётаки сделать gzwrite именно в переменную, а не в файл? Или наверняка есть правильный метод, библиотека то на весь мир известна, мне кажется я просто что-то упустил

Добавлено через 37 минут
Вот как то так

C++
1
2
3
4
char src[390]="compressed compressed";
gzFile zfp = gzopen(buf,"wb");
gzwrite(zfp,src,390);
gzclose (zfp);
Помогите допилить, чтобы работало
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.06.2011, 00:18

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

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

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

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

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


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

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

Новые блоги и статьи
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru