Работа с zip архивами29.10.2024, 02:49. Показов 22162. Ответов 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
|
|
| 29.10.2024, 17:16 | |
|
testuser2, посмотри по ссылке что я тебе дал, ты кстати и сам мог бы задать вопрос на иностранном форуме, видишь они даже быстро отвечают как я спросил
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||
| 29.10.2024, 17:34 | ||||||
|
Обрати внимание на функцию:
0
|
||||||
| 29.10.2024, 17:44 [ТС] | ||
|
HackerVlad, офигенно! У меня была кстати мысль, что там не одним методом все делать, там 121 функция, видимо кому как удобние. Тут вообще 5 функций используется и ни одной с префиксом zip или unz
Добавлено через 1 минуту
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 29.10.2024, 17:53 | |
|
testuser2, всё идеально работает, я только что проверил. Спасибо конечно им, молодцы, выложили хороший класс для распаковки. Однако используются функции ни те что ты думал почему-то...
Да и кстати! Вуаля! Там тоже можно распаковывать сразу в байтовый массив при чём можно выбирать какой именно файл выдернуть из архива по FileName для того чтобы засунуть его в байтовый массив, прям как ты и хотел, прям как ты и мечтал. Прям твоя мечта сбылась с этим классом, что выложили.
1
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||||||||||
| 29.10.2024, 18:37 | |||||||||||
Сообщение было отмечено testuser2 как решение
Решение
Итак, я подготовил новое решение для этой очень интересной темы! Я написал простенькую программку для чтения картинок из ZIP файла, выбираешь из списка файл и картинка загружается. На лету! Никаких временных файлов! Всё идёт через байтовые массивы! Считывание файлов из ZIP идёт с помощью библиотеки zlibwapi.dll и с помощью класса, который нам любезно предоставил Arnoutdv.
Форма:
1
|
|||||||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||||||||
| 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
|
||||||||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||||||||||
| 29.10.2024, 23:31 | |||||||||||
|
Всё, я по быстрому сделал новый класс теперь уже с полным отказом от DLL:
Код формы:
1
|
|||||||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 29.10.2024, 23:34 | |
|
Зато этот новый класс весит всего 24 Кб! И поэтому EXE-файл будет не таким большим.
И реализовано абсолютно всё о чём только мечтал testuser2. А именно распаковка любых файлов, на выбор, из ZIP-архива напрямую в байтовый массив, а не в файл.
0
|
|
|
Модератор
|
|
| 29.10.2024, 23:41 | |
|
https://www.cyberforum.ru/post6183877.html
Без внешних зависимостей.
1
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||||||
| 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
|
|||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 30.10.2024, 01:25 | |
|
Сами смотрите что получилось по скоростям, всего для 400Кб файла при распаковке...
1
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 30.10.2024, 01:42 | |
|
Делаю для себя вывод, что найденная мною на просторах сети функция Inflate написанная на VB6 самописным кодом довольно медленная по сравнению с аналогичной функцией в DLL для распаковки буфера ZIP. Возможно у гения-болгара функция распаковки буфера будет по быстрее конечно, но лень уже ковыряться и вникать. Итак много сделал очень.
Добавлено через 1 минуту Было бы неплохо распаковывать буфер с помощью библиотеки zipfldr.dll по технологии от The Trick тогда и скорость будет большая и никакие DLL с собой тягать не надо будет в виде zlibwapi.dll. Добавлено через 12 минут Вот начал разбираться с кодом от The Trick и сразже первый залипон не найдено описание структуры UUID. Надо думать почему.
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 30.10.2024, 01:44 | |
|
У меня поэтому сразу же вопрос к товарищу трюкачу, как так вы даёте код, а он не работает и требует что-то не описанное вами...
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 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
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||
| 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 | |
|
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи.
Через несколько переработок от PHP кода к C89 (надеюсь, 89).
Но довольно запутанно получилось. Код для Linux.
Но если убрать time и то, что с ним. . .
|
Сам себя обучал rest api
anaschu 02.07.2026
Педагогический лайфхак: Почему чистый REST API для ученика намного круче, чем готовые библиотеки
Когда мы отказались от капризного JAR-файла AnyLogic и переписали код на стандартный HttpClient,. . .
|