Работа с zip архивами29.10.2024, 02:49. Показов 18760. Ответов 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
|
|
| 29.10.2024, 17:16 | |
|
testuser2, посмотри по ссылке что я тебе дал, ты кстати и сам мог бы задать вопрос на иностранном форуме, видишь они даже быстро отвечают как я спросил
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||
| 29.10.2024, 17:34 | ||||||
|
Обрати внимание на функцию:
0
|
||||||
| 29.10.2024, 17:44 [ТС] | ||
|
HackerVlad, офигенно! У меня была кстати мысль, что там не одним методом все делать, там 121 функция, видимо кому как удобние. Тут вообще 5 функций используется и ни одной с префиксом zip или unz
Добавлено через 1 минуту
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 29.10.2024, 17:53 | |
|
testuser2, всё идеально работает, я только что проверил. Спасибо конечно им, молодцы, выложили хороший класс для распаковки. Однако используются функции ни те что ты думал почему-то...
Да и кстати! Вуаля! Там тоже можно распаковывать сразу в байтовый массив при чём можно выбирать какой именно файл выдернуть из архива по FileName для того чтобы засунуть его в байтовый массив, прям как ты и хотел, прям как ты и мечтал. Прям твоя мечта сбылась с этим классом, что выложили.
1
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 29.10.2024, 18:37 | |||||||||||
Сообщение было отмечено testuser2 как решение
Решение
Итак, я подготовил новое решение для этой очень интересной темы! Я написал простенькую программку для чтения картинок из ZIP файла, выбираешь из списка файл и картинка загружается. На лету! Никаких временных файлов! Всё идёт через байтовые массивы! Считывание файлов из ZIP идёт с помощью библиотеки zlibwapi.dll и с помощью класса, который нам любезно предоставил Arnoutdv.
Форма:
1
|
|||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||||||||
| 29.10.2024, 23:20 | ||||||||||||
|
Добавлено через 2 минуты Это наталкивает меня на мысль, что если ещё немного доработать этот класс, то и распаковывать буфер можно самому вручную, без DLL, и при этом не использовать слишком большой громоздкий класс от гения-болгара wqweto. Добавлено через 39 минут testuser2, помнишь я тебе давал ссылку на распаковку ZIP-буфера вручную? https://github.com/lsimao/infl... te.bas#L30 Так вот используя этот код можно обойтись вообще без всяких там DLL Добавлено через 1 минуту Просто я случайно нашёл на гитхабе эту функцию:
Добавлено через 9 минут Ладно, так и быть добавим ещё функцию подсчёта контрольной суммы CRC32:
Есть вродебы и API такая для подсчёта CRC32 но я не помню как её вызывать и из какой стандартной библиотеки DLL винды. Добавлено через 45 секунд Поэтому пока самописная пусть будет, надеюсь она не сильно медленная (содрал с иностранного форума)
1
|
||||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 29.10.2024, 23:31 | |||||||||||
|
Всё, я по быстрому сделал новый класс теперь уже с полным отказом от DLL:
Код формы:
1
|
|||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 29.10.2024, 23:34 | |
|
Зато этот новый класс весит всего 24 Кб! И поэтому EXE-файл будет не таким большим.
И реализовано абсолютно всё о чём только мечтал testuser2. А именно распаковка любых файлов, на выбор, из ZIP-архива напрямую в байтовый массив, а не в файл.
0
|
|
|
Модератор
|
|
| 29.10.2024, 23:41 | |
|
https://www.cyberforum.ru/post6183877.html
Без внешних зависимостей.
1
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||
| 30.10.2024, 01:19 | |||||||
|
The trick, ок, ты там написал "Позже сделаю класс для работы с архивами непосредственно работающий с Zipfldr.dll" ты сделал класс? наверное нет, да и там тот код я не понял там только Form_Load и мало кода у тебя и всё.
Добавлено через 52 секунды The trick, у тебя там через shell32 извлекает или как я не понял. Добавлено через 28 минут The trick, ты случайно не помнишь API для подсчёта CRC32? А то мне кажется что самописная медленно работает. Добавлено через 11 минут Добавлено через 38 секунд Это не нативная библиотека а ActiveX или COM'авскоя... Добавлено через 22 минуты Кажется нашёл:
Добавлено через 29 минут Я сравнил два своих проекта по скоростям, который использует DLL для распаковки, и который не использует... Разница в скорости конечно очень существенная. Самописный скрипт распаковки для 600 Кб файла 400 млск времени занимает, а из DLL почти мгновенно всего за 16 млск.
0
|
|||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 30.10.2024, 01:25 | |
|
Сами смотрите что получилось по скоростям, всего для 400Кб файла при распаковке...
1
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 30.10.2024, 01:42 | |
|
Делаю для себя вывод, что найденная мною на просторах сети функция Inflate написанная на VB6 самописным кодом довольно медленная по сравнению с аналогичной функцией в DLL для распаковки буфера ZIP. Возможно у гения-болгара функция распаковки буфера будет по быстрее конечно, но лень уже ковыряться и вникать. Итак много сделал очень.
Добавлено через 1 минуту Было бы неплохо распаковывать буфер с помощью библиотеки zipfldr.dll по технологии от The Trick тогда и скорость будет большая и никакие DLL с собой тягать не надо будет в виде zlibwapi.dll. Добавлено через 12 минут Вот начал разбираться с кодом от The Trick и сразже первый залипон не найдено описание структуры UUID. Надо думать почему.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 30.10.2024, 01:44 | |
|
У меня поэтому сразу же вопрос к товарищу трюкачу, как так вы даёте код, а он не работает и требует что-то не описанное вами...
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 30.10.2024, 01:56 | |
|
И что такое As IShellExtInit что такое As IPersistFolder2
Мне надо что-то подключать в Reference какую-то TLB описывающею? Добавлено через 23 секунды Код есть а как с ним работать не понятно... Добавлено через 6 минут The trick, почему сразу нельзя было написать какие ещё нужны зависимости? почему я долен ломать голову где взять описание не описанных структур и целый час мучиться и так не запустить твой код ну Добавлено через 1 минуту The trick, и можно ли вообще с помощью zipfldr.dll распаковывать буфер? чисто буфер и всё?
0
|
|
| 30.10.2024, 13:44 [ТС] | ||
|
Самый простой способ заюзать zipfldr.dll (только разархивация). С одного из форумов
Распаковка в стиле Minizip, от того же волшебного чувака (dilettante).. https://www.vbforums.com/showt... ost5424767 Добавлено через 12 минут Точнее там не распаковка, но получение информации Добавлено через 14 минут Пример на Vba с использованием Compression API https://newbe.dev/vb-excel-vba... de-example Эти функции вроде поддерживают формат MSZIP
1
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||
| 30.10.2024, 17:49 | |||
|
testuser2, так CAB-архив это совсем не ZIP
Добавлено через 2 минуты testuser2, ты наконец-то нашёл способ как получить список файлов внутри зипа с помощью zlibwapi ? Добавлено через 5 минут testuser2, хочешь прикол? сам wqweto мне сказал что у него код распаковки медленнее чем если использовать DLL сам честно признался... Добавлено через 1 минуту То есть использую библиотеку zlibwapi.dll мы значительно выигрываем в скорости, как ни крути, особенно при больших объёмах это будет ощутимо-заметно... Добавлено через 4 минуты Добавлено через 3 минуты Добавлено через 2 минуты testuser2, из формы ты даже не вызываешь свой накорябанный код GetCurrentFileInfo
0
|
|||
| 30.10.2024, 17:49 [ТС] | ||
|
HackerVlad, примеров много, вот неплохой пример. Вроде бы это C, потому, что на С++ всякие квадратные скобки всфкая такая х..ня <<>>> ни че не понятно
Здесь структуры минизиповские можно посмотреть. Кстати лучше спользовать 64 версии функций. Перевод:
0
|
||
| 30.10.2024, 17:49 | |
|
Помогаю со студенческими работами здесь
40
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|