|
0 / 0 / 0
Регистрация: 26.08.2009
Сообщений: 11
|
|
Помогите разобраться с zip архивами.09.09.2009, 09:36. Показов 4327. Ответов 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 помогите разобраться Помогите разобраться Помогите разобраться со структурами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|