|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
|
Помогите разобраться с zip архивами.09.09.2009, 09:36. Показов 4427. Ответов 17
Метки нет (Все метки)
Есть zip-архив, из него надо вытащить определенный файл, обработать его и запихнуть обратно, сохранив все остальные файлы. Если кому не трудно подскажите, как проще работать с архивами.
Нашел библиотеку ZLIB, но так и не смог разобраться с ней. Основная проблема как ей воспользоваться. У меня VC++ 2008 и куча файлов относящихся к ZLIB а как их подружить вместе пока не разобрался. Если у кого есть ссылка на описание этого волшебного действия, киньте пожалуйста, буду очень признателен, так как с подобными ситуациями я наверно еще не раз столкнусь. Еще попутно пару вопросиков. Программка, которую я пишу будет обрабатывать несколько архивов подряд, все действия однотипные и я решил их распараллелить, вопрос такой можно ли как-нибудь управлять количеством инициированных процессов. Я хочу при запуске программы передавать ей параметр, в котором будет указанно максимальное количество процессов, это что бы процессов не было больше чем процов на сервере и чтобы еще пользователям что то оставалось. Еще вопрос который меня заинтересовал, но пока еще не начал изучать, если разные архивы будут обрабатываться параллельно в разных процессах можно ли будет писать логи в один файл, и как это лучше делать? Присвоить глобальной переменной файл логов и все процессы туда будут писать, или лучше организовать какой-нибудь вектор и туда добавлять данные логов, а по завершению всех обработок скинуть в файл. Не знаю какой из них возможен и проще осуществить.
0
|
|
| 09.09.2009, 09:36 | |
|
Ответы с готовыми решениями:
17
помогите пожалуйста в работе с ZIP архивами Работа с zip-архивами. Работа с zip архивами |
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 09.09.2009, 14:18 | ||
|
zlib: http://sourceforge.net/projects/libpng
zziplib: http://sourceforge.net/projects/zziplib zlib - это только компрессор. Для работы с архивами нужна другая библиотека - например zziplib. Можно использовать библиотеку и работать с архивом через нее. Или есть другой способ - можно вызывать какой-нибудь архиватор - например infozip zip & unzip (http://www.info-zip.org/). Или использовать архиватор 7z (http://www.7-zip.org/).
Работа с архивами - тяжелая операция. Некоторые архиваторы могут использовать несколько CPU при работе. Прежде чем что-либо делать параллельно сделай сначала самый простой вариант с одним процессом. Потому что параллельное программирование - это вообще отдельная большая тема. И скажи какая задача в целом ? В чем собственно состоит "обработка" файлов в архиве ?
0
|
||
|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
|
| 09.09.2009, 15:11 [ТС] | |
|
Задача предельно простая. Есть распределенная 1С 7.7 необходимо модернизировать компоненту УРБД чтобы в периферийные базы выгружались только те данные которые предназначены непосредственно только этой базе. Так как залезть в компоненту УРБД и поправить ее dll у меня знаний просто не хватает (свою первую книжку по С++ взял в руки только в июле) решил мучить архив. На данный момент необходимый файл в один поток благополучно обрабатывается, проблемными остались некоторые моменты.
1) Данные из файла грузятся в список значений, обрабатываются и выгружаются, но я уже третий день бьюсь над высвобождением памяти, съедает память, а корректно настроить деструктор никак не получается, бросает большую часть данных, но это дело логики программы с этим я сам справлюсь. 2) У меня есть стойкое желание не работать с архивом используя внешние архиваторы запуская их с консоли, как внедрить какой нибудь модуль архивирования в свою прогу пака не знаю, но очень хочу. 3) Сервер на котором будет крутиться эта прога 8-и ядерный, я думаю ничего ему не будет если я запущу 2-6 потоков одновременно, тем более что я хочу управлять количеством потоков для нахождения оптимального количества под этот сервер. Большая часть ресурсов уходит на обработку файла. 4) Хочу прикрутить логирование всего что прога сделала, включая время выполнения и объем обработанных данных. Это мне нужно во первых для красоты а во вторых понять уязвимые места программы, и дает ли она сбои во время тестового прогона на реальных данных. Вот в принципе и все задачи которые у меня остались. P.S. К сожалению с английским у меня очень туговато, просьба ссылки давать на русскоязычные источники, если они вообще существуют.
0
|
|
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|||
| 09.09.2009, 15:29 | |||
Не проще ли распаковать, потом обработать, потом запаковать ?
Или ты Intel Core i7 обозвал 8-ядерным ? Так он 4-ех ядерный
0
|
|||
|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
|||
| 09.09.2009, 15:42 [ТС] | |||
0
|
|||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|||
| 09.09.2009, 17:48 | |||
Так что ничем не лучше. Вместо PKUNZIP можно взять infozip-овский unzip. Или вообще взять 7zip.
Только памяти маловато
0
|
|||
|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
|||
| 10.09.2009, 09:38 [ТС] | |||
Вот я скачал архив, разархивировал его, а там куча файлов. И сразу встает куча вопросов. Что с ними делать? Куда их запихнуть? Где что прописать, что бы можно было заголовочный файлы использовать в своей разработке? Я понимаю, что эти вопросы возникают из-за банального незнания Microsoft Visual Studio 2008, но может быть кто то наталкивался на какое нибудь подобие мануала как это настраивается.
P.S. Пока что весь наш диалог напоминает мне лирическое отступление от темы. А по существу вопроса что нибудь есть? Или как всегда придется придерживаться поговорки "Если хочешь что то сделать хорошо, сделай это сам." Добавлено через 8 минут И еще попутный вопросик. У меня двусвязный список в котором хранятся ссылки на переменные, при удалении этого списка я полностью теряю связь со всеми этими ссылками, но программа по прежнему занимает много места. Вся сложность заключается в том что список не линеен. По началу я решил продублировать все ссылки в линейный список, и проверить что не удаляется. Но и тут не обошлось без подводных камней. В режиме отладки я вижу какая переменная была удалена, а какая нет, но вот программно я не могу перебрать и выделить не удаленные переменные и отсортировать из по определенному критерию. Вся проблема заключается в том чтобы определить что храниться по ссылке, реальная переменная или мусор оставшийся после удаления переменной. Если какие нибудь методы, не приводящие к краху программы, с помощь которых можно проверить действительна ли еще ссылка, или она ссылается в "никуда".
0
|
|||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
|||||||
| 10.09.2009, 10:40 | |||||||
0
|
|||||||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|||||
| 10.09.2009, 10:57 | |||||
Прочитать примеры использования - в таких библиотеках этого всего полно. Если нет в исходниках, то нетрудно найти в Internet.
Потом добавить в проект файлы *.c - чтобы компилировались. Файлы *.h добавить с помощью #include "file.h" в свою программу. Добавлено через 4 минуты
Я у себя и так ее использовал, но тебе-то это не поможет ![]() Если ты хочешь научиться подключать ЛЮБЫЕ библиотеки, то должен сам разобраться в ЭТОЙ библиотеке. Дальше будет легче ![]() А вопросы задавать более конкретные и осмысленные. Для начала прочитай документацию что идет в библиотеке. Добавлено через 2 минуты
Тогда у тебя все что != NULL точно будет указывать на данные, а все что == NULL не будет никуда указывать ![]() Добавлено через 55 секунд Или другой способ - завели флажок, который говорит содержит ли указатель полезные данные или не содержит. Можно применять оба способа одновременно.
0
|
|||||
|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
||||||
| 11.09.2009, 15:57 [ТС] | ||||||
|
При оптимизации программы возникла потребность прочитать последнюю строку в записанном файле. Сейчас это выглядит примерно так:
sp->data типа string, а файл обыкновенный текстовый.
0
|
||||||
|
Модератор
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
|
|||||||||||||
| 11.09.2009, 19:27 | |||||||||||||
В двух местах, кстати... Добавлено через 4 минуты
0
|
|||||||||||||
|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
|||||||
| 14.09.2009, 09:48 [ТС] | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
||||||
| 15.09.2009, 09:36 [ТС] | ||||||
|
Если кто столкнется с проблемой одновременного чтения записи в файл вот вам кусочек кода который у меня заработал:
P.S. Вопрос о работе с архивами остался открытым. Через system() давно уже разобрался, но мне хочется механизм интегрировать в свою программу. И еще маленькая просьба: ссылки на англоязычные источники не предлагать так как точно не помогут.
0
|
||||||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
|||
| 15.09.2009, 16:01 | |||
0
|
|||
|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
||
| 15.09.2009, 16:25 [ТС] | ||
|
Порой 0,1% достаточно чтобы начать самому разбираться. Сегодня с утра мне дали совет как можно работать с файлом, к обеду я не только разобрался что к чему, но и переделал свою программу, теперь один из вопросов снят с повестки дня. По zlib и zziplib пока ничего не получается. Уже перепробовал больше дюжины тестовых примеров которые нашел, но ни один из них у меня так и не скомпилировался, большая часть проблем из-за того что почти все примеры уже давно как обросли бородой. С zlib я застрял на том что я немогу получить библиотеку zlib.lib. Мне удалось заставить VC++ скомпилировать библиотеку, но на выходе я получил zlib1d.lib которая наотрез отказалась работать с моей тестовой программой. Описание команд zlib я нашел, в принципе немного поломать голову и можно будет сделать свой архиватор, это не большая проблема. Для меня проблема это достать не исходники, а готовую библиотеку которую я смогу использовать в своем проекте.
0
|
||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 15.09.2009, 16:53 | ||
Не собирай библиотеку вообще ! Включи нужные исходники в свою программу. И исходники zlib & zziplib. Для простоты - положи все нужные файле прямо к себе в каталог со своей программой. Хотя разложить все правильно не составляет большого труда. zip1d.lib - это наверное отладочная версия. Добавлено через 1 минуту Там вроде для Visual Studio отдельно написаны инструкции для сборки (я имею zlib & zziplib). Просто я когда-то собирал эти две библиотеки для одного товарища. Сам-то я их не использовал - точнее только проверил что примеры работают.
0
|
||
|
evlan
|
||
| 18.09.2009, 15:03 | ||
|
), смотря что надо. Определения этих клссов находятся в заголовочных файлах ибо они шаблонные, а занчит компилировать библиотеку и линковать её при сборке проекта, не надо. Или, как вариант, можно написать свой упрощённый вариант умного указателя, который сам будет заботиться об очищении памяти (в деструкторе, т.е. память особождается когда разрушается объект хранящий ссылку). Тогда утечек не будет, и при работе с памятью будешь пользоваться только new/malloc. Я на эту темку (да и форум ) случайно наткнулся, гугля по zip либам, но у меня всё гораздо хуже. Я не могу доставлять библиотеки в систему (работаю через Citrix, сама рабочая машина в Швеции, вроде). Пока нарыл у себя только zlib, но он мне не подходит. Так что пользую workaround в виде FILE* f = popen("unzip -l test.zip", "r"); что бы получить список файлов в архиве, например.
|
||
|
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
|
||
| 18.09.2009, 17:06 | ||
0
|
||
| 18.09.2009, 17:06 | |
|
Помогаю со студенческими работами здесь
18
Работа с zip архивами (нужный порядок файлов) Посоветуйте хорошую библиотеку для работы с zip-архивами If else помогите разобраться Помогите разобраться Помогите разобраться со структурами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
в-строка - входное арифметическое выражение в инфиксной(обычной). . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|