Работа с zip архивами29.10.2024, 02:49. Показов 18480. Ответов 282
Метки нет (Все метки)
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.
Добавлено через 1 минуту кстати словосочетание zip-архивами в названии форум блочит почему-то )Добавлено через 6 минут На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
|
||||||
| 29.10.2024, 02:49 | |
|
Ответы с готовыми решениями:
282
Работа с ZIP-архивами - распаковка файлов Автоматизировать заполнение "Графика выполненных работ по месяцам" Задания из лаб.работ |
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 17.02.2025, 20:24 | ||
|
Ну да, если захотеть, можно придумать будет вообще без класса через SetFilePointer какой-нибудь читать нужный кусок)))) чтобы сэкономить эти 32 Кб, как ты говоришь)
Добавлено через 46 секунд
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 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
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 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
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 18.02.2025, 15:31 | |
|
EXE на 25 Мб а Process Hacker выдаёт пик виртуалки вообще на 75 Мб. Почему?
0
|
|
|
Модератор
|
||
| 18.02.2025, 15:37 | ||
|
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||
| 18.02.2025, 15:57 | |||
|
Так и не объяснил почему 75 Мб. Решил свалить, чтобы не оправдываться.
Добавлено через 49 секунд Добавлено через 2 минуты Добавлено через 4 минуты The trick, ну VMMap у меня тоже показывает, как и у тебя кстати
0
|
|||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||
| 23.02.2025, 16:35 | ||||||
|
Тема неожиданно получила дальнейшее развитие. Так как я узнал о новом коде с помощью API как извлечь все файлы из ZIP-архива. Поэтому я по быстрому состряпал новый пример-программу для этой цели.
Как распаковать ZIP с помощью Win32 API на VB6
Но этот пример работает только начиная от Windows 7, у меня лично на моём компьютере в XP это не работает.
1
|
||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||
| 23.02.2025, 16:55 | ||||||
|
testuser2, ну да, а ты что не знал? эти флаги давно имеются
Добавлено через 1 минуту Для этого кода тоже можно флаги подсобачить, чтобы скрывать прогресс. Надо только придумать как их сюда запихнуть. Пока не разбирался, но думаю, что можно и так даже.
0
|
||||||
| 23.02.2025, 17:07 [ТС] | ||||||
|
В комовской версии не все флаги работают из msdn
Лучше так, иначе в каждой итерации создается и уничтожается объект папки
1
|
||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 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
|
||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 23.02.2025, 17:59 | ||
|
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 24.02.2025, 16:18 | |
|
И ещё один минус этого кода в том, что он не работает с файлами docx в отличии от кода The trick
Добавлено через 13 минут Даже класс от wqweto просто так не читает файлы docx как нам надо - структуру показывает а файлы сами по себе не извлекает. Единственный код который это реально делает это код от The trick.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 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
|
||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||
| 04.03.2025, 15:59 | |||
|
testuser2, у меня класс есть, который я когда-то скачал с иностранного форума, но твой пример тоже очень хороший
Добавлено через 1 минуту Добавлено через 21 минуту
0
|
|||
| 04.03.2025, 15:59 | |
|
Помогаю со студенческими работами здесь
280
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера 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. Пошагово создадим проект для загрузки изображения. . .
|