Работа с zip архивами29.10.2024, 02:49. Показов 24916. Ответов 283
Метки нет (Все метки)
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.
Добавлено через 1 минуту кстати словосочетание zip-архивами в названии форум блочит почему-то )Добавлено через 6 минут На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
|
||||||
| 29.10.2024, 02:49 | |
|
Ответы с готовыми решениями:
283
Работа с ZIP-архивами - распаковка файлов Автоматизировать заполнение "Графика выполненных работ по месяцам" Задания из лаб.работ |
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 17.02.2025, 20:24 | ||
|
Ну да, если захотеть, можно придумать будет вообще без класса через SetFilePointer какой-нибудь читать нужный кусок)))) чтобы сэкономить эти 32 Кб, как ты говоришь)
Добавлено через 46 секунд
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 18.02.2025, 03:51 | |
|
The trick, меня, смотри, я уже придумал технологию для само-распаковывающегося SFX-архива:
1. Используем твой класс для того чтобы дописать в конец ZIP или CAB файл (только один файл!) но внутри он может содержать много файлов как бы 2. SFX программа не будет использовать класс вообще, чтобы сэкономить 32 Кб, а будет просто через SetFilePoiner всегда с одной и той же позиции и до конца файла считывать файл-архива и принимать решения о распаковки в какую-то папку P. S. Скорее всего у тебя в твоей структуре есть 4 байта выделенные для размера файла (я не проверял но я бы лично так делал) и скорее всего их можно было бы тоже прочитать для того чтобы узнать длину вшитого файла (всегда из одной позиции) скорее всего но можно этого и не делать если читать до EOF всё равно же начинать чтение надо всегда с одного и тоже смещения, если файл будет всегда называться одинаково то и смещение по логике всегда будет одинаковым и если файл будет только один Добавлено через 2 минуты Кстати я УЖЕ написал SFX из ресурсов, но там наврное максимум мегабайтов 500-800 потянет, есть надежда что технология хвоста файла больше позволит мегабайтов для архива выделить. Добавлено через 2 минуты The trick, у Христиана Гислера самараспаковка около 40 Кб занимает, мне нужно сделать меньше, чтобы быть круче Добавлено через 4 часа 41 минуту Я тут так подумал, я думаю, что класс вообще не нужен, просто берешь дописываешь сам в EXE буфер файла и всё. И не нужно ничего знать вообще ни имя файла, ни его размер, ничего не нужно, ни класс не нужен вообще для SFX реализации. Добавлено через 1 минуту У меня вот болванка (программа для самораспаковки) занимает 24576 EXE. Это меньше чем где-либо у кого-либо. Добавлено через 6 секунд У меня вот болванка (программа для самораспаковки) занимает 24576 EXE. Это меньше чем где-либо у кого-либо. Добавлено через 1 минуту И я думаю можно подписать в конец EXE файла начиная с 24577 байта этот свой добавочный CAB файл и всё. Добавлено через 30 секунд У меня была даже мысль удалить лишние нули в конце EXE чтобы сэкономить ещё чуть-чуть, но пока не буду... Добавлено через 10 минут Только что провернул интересный финт: Решил дописать в конец EXE и присоединить туда CAB файл, сначала думал писать скрипт для этого, но поленился и решил это сделать с помощью Total Commander, просто так этого и в TC не сделать, погуглил и понял как это сделать взял EXE переименовал в file01.txt потом взял CAB и переименовал в file02.txt потом в TC выбрал пункт в меню Собрать/Склеить файлы и вуаля! Магия! Готово! Получился на выходе новый файл уже с подписанным в хвост EXE архивом! Далее проверяем - нажимает комбинацию клавиш Ctrl+PageDown и TC входит успешно в EXE как в архив! Вуаля! Всё вручную через Total Commander! Просто магия! Даже класс от The trick не понадобился))) Добавлено через 1 час 40 минут The trick, но я тут выяснил что просто подписанные в хвост EXE большие объёмы тоже занимают Virtual Size Memory так что ни факт что будет чем-то лучше чем из ресурсов конечно, тоже много ест виртуалки... Просто запускаешь EXE где в хвосте что-то огромное записано и смотришь на этот процесс и видишь как отъело просто так без причины много виртуалки.
0
|
|
|
Модератор
|
||
| 18.02.2025, 12:56 | ||
|
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 18.02.2025, 15:29 | |
|
The trick, а теперь посмотри с помощью программы Process Hacker или Process Explorer, ровно как на этой картинке: https://www.cyberforum.ru/atta... 1613154219
Добавлено через 3 минуты Я только что провёл эксперимент создал пустой EXE на VB6 откомпилировал новый стандартный EXE он оказался 16 Кб всего. Потом я просто внедрил в этот новый EXE в хвост файл на 25 Мб (провбовал как с помощью класса The Trick так и через ручную склейку через Total Commander) Потом просто запускаешь Process Hacker открываешь этот запущенный процесс и видишь как виртуальная память уже 75 Мб почему-то (в три раза превышает вложение в 25 Мб)! Как это объяснить?
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 18.02.2025, 15:31 | |
|
EXE на 25 Мб а Process Hacker выдаёт пик виртуалки вообще на 75 Мб. Почему?
0
|
|
|
Модератор
|
||
| 18.02.2025, 15:37 | ||
|
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|||
| 18.02.2025, 15:57 | |||
|
Так и не объяснил почему 75 Мб. Решил свалить, чтобы не оправдываться.
Добавлено через 49 секунд Добавлено через 2 минуты Добавлено через 4 минуты The trick, ну VMMap у меня тоже показывает, как и у тебя кстати
0
|
|||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||
| 23.02.2025, 16:35 | ||||||
|
Тема неожиданно получила дальнейшее развитие. Так как я узнал о новом коде с помощью API как извлечь все файлы из ZIP-архива. Поэтому я по быстрому состряпал новый пример-программу для этой цели.
Как распаковать ZIP с помощью Win32 API на VB6
Но этот пример работает только начиная от Windows 7, у меня лично на моём компьютере в XP это не работает.
1
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||||||
| 23.02.2025, 16:55 | ||||||
|
testuser2, ну да, а ты что не знал? эти флаги давно имеются
Добавлено через 1 минуту Для этого кода тоже можно флаги подсобачить, чтобы скрывать прогресс. Надо только придумать как их сюда запихнуть. Пока не разбирался, но думаю, что можно и так даже.
0
|
||||||
| 23.02.2025, 17:07 [ТС] | ||||||
|
В комовской версии не все флаги работают из msdn
Лучше так, иначе в каждой итерации создается и уничтожается объект папки
1
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 23.02.2025, 17:13 | |
|
testuser2, хорошо, спасибо за это замечание, буду знать. А теперь вопрос на засыпку: как сюда присобачить флаги для скрытия прогресса?
0
|
|
| 23.02.2025, 17:41 [ТС] | ||||||
|
HackerVlad, сдесь описание параметров
https://learn.microsoft.com/ru... r-copyhere Добавлено через 3 минуты Если подключить C:\Windows\SysWOW64\shell32.dll, то можно использовать раннее связывание
1
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
||
| 23.02.2025, 17:59 | ||
|
0
|
||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 24.02.2025, 16:18 | |
|
И ещё один минус этого кода в том, что он не работает с файлами docx в отличии от кода The trick
Добавлено через 13 минут Даже класс от wqweto просто так не читает файлы docx как нам надо - структуру показывает а файлы сами по себе не извлекает. Единственный код который это реально делает это код от The trick.
0
|
|
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|
| 27.02.2025, 20:33 | |
|
Итак, недавно мне дали очень интересную ссылку на Excel-ZIP класс: https://github.com/cristianbus... ree/master
Этот класс недавно пару лет назад написали какие-то умные люди из Массачусетского университета. Скачав этот очень хороший примерчик я понял что он работает ещё и в VB6 ни только в VBA-Excel. Итак достоинства и недостатки этого кода: Достоинства: - Маленький размер EXE (всего 40Кб, по сравнению со 100 - 120 Кб класса от известного болгарина wqweto) - Относительно быстрая скорость (особенно в EXE) - Работает в P-коде Недостатки: - Не работает на больших файлах 500Мб уже фатальный вылет - Не работает в EXE со всеми галочками оптимизации - Не распаковывает файлы из DOCX нормально Но зато теперь в мини-программе по чтению картинок из ZIP картинки теперь загружаются со скоростью 15-16 мс всего! При этом довольно маленький размер EXE! Не требует никаких DLL!
1
|
|
| 04.03.2025, 15:04 [ТС] | ||||||
|
Уже многое было в этой теме, и я если честно путаюсь где что искать. Но, поскольку, HackerVlad, недавно выяснил кое-что про cabinet.dll, выложу сохраненный у меня пример использования современных функций (работающих, начиная с win8.1) cabinet.dll (компрессия/декомпрессия) там в примере сравнение с NT-компрессией, чтобы освежить память в данном вопросе. Там я еще добавил кое-какие константы.
Кликните здесь для просмотра всего текста
2
|
||||||
|
Вернулся
1782 / 677 / 46
Регистрация: 10.09.2021
Сообщений: 2,840
|
|||
| 04.03.2025, 15:59 | |||
|
testuser2, у меня класс есть, который я когда-то скачал с иностранного форума, но твой пример тоже очень хороший
Добавлено через 1 минуту Добавлено через 21 минуту
0
|
|||
| 04.03.2025, 15:59 | |
|
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки.
Добавлено:
- Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
|
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы.
Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
|
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|