Работа с zip архивами29.10.2024, 02:49. Показов 19363. Ответов 282
Метки нет (Все метки)
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.
Добавлено через 1 минуту кстати словосочетание zip-архивами в названии форум блочит почему-то )Добавлено через 6 минут На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
|
||||||
| 29.10.2024, 02:49 | |
|
Ответы с готовыми решениями:
282
Работа с ZIP-архивами - распаковка файлов Автоматизировать заполнение "Графика выполненных работ по месяцам" Задания из лаб.работ |
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 29.10.2024, 17:16 | |
|
testuser2, посмотри по ссылке что я тебе дал, ты кстати и сам мог бы задать вопрос на иностранном форуме, видишь они даже быстро отвечают как я спросил
0
|
|
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||
| 29.10.2024, 17:34 | ||||||
|
Обрати внимание на функцию:
0
|
||||||
| 29.10.2024, 17:44 [ТС] | ||
|
HackerVlad, офигенно! У меня была кстати мысль, что там не одним методом все делать, там 121 функция, видимо кому как удобние. Тут вообще 5 функций используется и ни одной с префиксом zip или unz
Добавлено через 1 минуту
0
|
||
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 29.10.2024, 17:53 | |
|
testuser2, всё идеально работает, я только что проверил. Спасибо конечно им, молодцы, выложили хороший класс для распаковки. Однако используются функции ни те что ты думал почему-то...
Да и кстати! Вуаля! Там тоже можно распаковывать сразу в байтовый массив при чём можно выбирать какой именно файл выдернуть из архива по FileName для того чтобы засунуть его в байтовый массив, прям как ты и хотел, прям как ты и мечтал. Прям твоя мечта сбылась с этим классом, что выложили.
1
|
|
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 29.10.2024, 18:37 | |||||||||||
Сообщение было отмечено testuser2 как решение
Решение
Итак, я подготовил новое решение для этой очень интересной темы! Я написал простенькую программку для чтения картинок из ZIP файла, выбираешь из списка файл и картинка загружается. На лету! Никаких временных файлов! Всё идёт через байтовые массивы! Считывание файлов из ZIP идёт с помощью библиотеки zlibwapi.dll и с помощью класса, который нам любезно предоставил Arnoutdv.
Форма:
1
|
|||||||||||
|
Испарился
1742 / 638 / 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
|
||||||||||||
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 29.10.2024, 23:31 | |||||||||||
|
Всё, я по быстрому сделал новый класс теперь уже с полным отказом от DLL:
Код формы:
1
|
|||||||||||
|
Испарился
1742 / 638 / 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
|
|
|
Испарился
1742 / 638 / 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
|
|||||||
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 30.10.2024, 01:25 | |
|
Сами смотрите что получилось по скоростям, всего для 400Кб файла при распаковке...
1
|
|
|
Испарился
1742 / 638 / 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
|
|
|
Испарился
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 30.10.2024, 01:44 | |
|
У меня поэтому сразу же вопрос к товарищу трюкачу, как так вы даёте код, а он не работает и требует что-то не описанное вами...
0
|
|
|
Испарился
1742 / 638 / 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
|
||
|
Испарился
1742 / 638 / 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? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|
|
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2.
Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом.
В. . .
|
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2.
Задача: отобразить спецтехнику, которая на данный момент находится в ремонте.
Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
|
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
|
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
|