Работа с zip архивами29.10.2024, 02:49. Показов 21840. Ответов 283
Метки нет (Все метки)
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.
Добавлено через 1 минуту кстати словосочетание zip-архивами в названии форум блочит почему-то )Добавлено через 6 минут На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
|
||||||
| 29.10.2024, 02:49 | |
|
Ответы с готовыми решениями:
283
Работа с ZIP-архивами - распаковка файлов Автоматизировать заполнение "Графика выполненных работ по месяцам" Задания из лаб.работ |
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 17.02.2025, 20:24 | ||
|
Ну да, если захотеть, можно придумать будет вообще без класса через SetFilePointer какой-нибудь читать нужный кусок)))) чтобы сэкономить эти 32 Кб, как ты говоришь)
Добавлено через 46 секунд
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 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
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 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
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 18.02.2025, 15:31 | |
|
EXE на 25 Мб а Process Hacker выдаёт пик виртуалки вообще на 75 Мб. Почему?
0
|
|
|
Модератор
|
||
| 18.02.2025, 15:37 | ||
|
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||
| 18.02.2025, 15:57 | |||
|
Так и не объяснил почему 75 Мб. Решил свалить, чтобы не оправдываться.
Добавлено через 49 секунд Добавлено через 2 минуты Добавлено через 4 минуты The trick, ну VMMap у меня тоже показывает, как и у тебя кстати
0
|
|||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 23.02.2025, 16:35 | ||||||
|
Тема неожиданно получила дальнейшее развитие. Так как я узнал о новом коде с помощью API как извлечь все файлы из ZIP-архива. Поэтому я по быстрому состряпал новый пример-программу для этой цели.
Как распаковать ZIP с помощью Win32 API на VB6
Но этот пример работает только начиная от Windows 7, у меня лично на моём компьютере в XP это не работает.
1
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 23.02.2025, 16:55 | ||||||
|
testuser2, ну да, а ты что не знал? эти флаги давно имеются
Добавлено через 1 минуту Для этого кода тоже можно флаги подсобачить, чтобы скрывать прогресс. Надо только придумать как их сюда запихнуть. Пока не разбирался, но думаю, что можно и так даже.
0
|
||||||
| 23.02.2025, 17:07 [ТС] | ||||||
|
В комовской версии не все флаги работают из msdn
Лучше так, иначе в каждой итерации создается и уничтожается объект папки
1
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 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
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 23.02.2025, 17:59 | ||
|
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 24.02.2025, 16:18 | |
|
И ещё один минус этого кода в том, что он не работает с файлами docx в отличии от кода The trick
Добавлено через 13 минут Даже класс от wqweto просто так не читает файлы docx как нам надо - структуру показывает а файлы сами по себе не извлекает. Единственный код который это реально делает это код от The trick.
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 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
|
||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||
| 04.03.2025, 15:59 | |||
|
testuser2, у меня класс есть, который я когда-то скачал с иностранного форума, но твой пример тоже очень хороший
Добавлено через 1 минуту Добавлено через 21 минуту
0
|
|||
| 04.03.2025, 15:59 | |
|
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
|
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
|
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
|
|
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
|
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
|
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока
Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
|
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов
• Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp
• Смежный проект:. . .
|