Работа с zip архивами29.10.2024, 02:49. Показов 24137. Ответов 283
Метки нет (Все метки)
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.
Добавлено через 1 минуту кстати словосочетание zip-архивами в названии форум блочит почему-то )Добавлено через 6 минут На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
|
||||||
| 29.10.2024, 02:49 | |
|
Ответы с готовыми решениями:
283
Работа с ZIP-архивами - распаковка файлов Автоматизировать заполнение "Графика выполненных работ по месяцам" Задания из лаб.работ |
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|
| 05.11.2024, 18:31 | |
|
testuser2, скорее всего существует жёсткое ограничение, например 30 там мегабайт или сколько, но я нашёл флаг DELTA_FLAG_IGNORE_OPTIONS_SIZE_LIMIT (Разрешить буферу параметров или файлам превышать ограничение по размеру по умолчанию.) может его попробовать
Добавлено через 36 секунд То есть существует "ограничение по размеру по умолчанию" понимаешь Добавлено через 11 минут Давай попробуем? DELTA_FLAG_IGNORE_OPTIONS_SIZE_LIMIT = (0x00040000)
1
|
|
| 05.11.2024, 18:41 [ТС] | |||||||||||||||||
|
Да флаг сработал
Private Const DELTA_FLAG_IGNORE_FILE_SIZE_LIMIT@ = 131072 / 10000 '&H20000Вызов функции:
Добавлено через 3 минуты
1
|
|||||||||||||||||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|
| 05.11.2024, 18:41 | |
|
Флаг-то сработал, я верно угадал значит, прочитав документацию, но вот скорость разочаровала
Упаковка 40 Мб: 23 секунды! жесть как медленно! Зато на выходе получилось всего 2 Мб! Сжало аж в 20 раз! Распаковка обратно занимает 312 млск терпимо ещё кстати.
0
|
|
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|||||||
| 05.11.2024, 21:48 | |||||||
|
testuser2, лучше чем CAB значит? а по скоростям что у тебя? отвратительно медленно сжимает тоже?
ну главное хотябы чтобы распаковка была более-ни-менее быстрой... Добавлено через 59 минут testuser2, у тебя кстати грамотическая ошибка в слове "Разкомментировать" правописание приставки рас, раз забыл из школьной программы что ли, рас пишется с глухими, раз с звонкими Добавлено через 15 минут Из документации: Функция DeltaFree Освобождает указанный блок памяти. Эту функцию необходимо вызвать после успешных вызовов CreateDeltaB и ApplyDeltaB , чтобы освободить буфер памяти, выделенный MSDelta. Добавлено через 5 минут testuser2, навёл красоту, вот окончательный вариант модуля:
testuser2, выложил все труды в готовых решениях: Готовые решения и полезные коды на Visual Basic 6.0 Добавлено через 55 минут testuser2, пытался сделать программу сейчас для извлечения из ресурсов буфера и распаковки для создания DLL но почему-то не работает, в IDE работает через F5 а вот в EXE не работает, ничего не могу понять, в полном шоке вообще, когда другая моя EXE работает прекрасно, это очень странно. Выскакивает ошибка 13. Что значит 13 ошибка, ты смотрел коды ошибок? В EXE только что самое смешное идёт Err.LastDllError будет 13 ничего не понимаю пока
1
|
|||||||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|
| 06.11.2024, 01:00 | |
|
Было очень сложно конечно разбираться с моей ошибкой этой, особенно когда работало в IDE но не работало в EXE (ненавижу такие чудеса, сложно понять что к чему) технология моя неправильная короче. Буду переделывать модуль.
Добавлено через 8 минут Какой-то глюк с ресурсами есть в VB6 Добавлено через 2 минуты Так что может моя технология и правильная а вот что там за баг с ресурсами в VB6 это уже другое Добавлено через 5 минут Я вспомнил, мне и The Trick говорил, что в VB6 есть баг при компиляции EXE связанный с ресурсами там в конце ресурсов иногда почему пару байт каки-то зачем-то добавляется Добавлено через 38 секунд Зато я наконец-то понял почему у меня не работает в EXE, но работает в IDE VB6 Добавлено через 9 минут По моему The Trick даже говорил, что нужно поставить SP6 тогда там этот глюк исправлен, а у меня SP5 стоит Добавлено через 1 минуту Суть в том что VB6 SP5 получается иногда изменяет данные в ресурсах в EXE - добавляет в конец лишние байты, это может быть один или два байта, или три или четыре лишних байта, это очень странно но это баг VB6 а не мой баг, а я целый час голову ломал думая почему у меня не работает мой модуль. Добавлено через 1 минуту Решение тут только одно буду отсекать лишние байты на конце, раз VB6 не умеет нормально компилировать EXE с ресурсами. Добавлено через 57 минут В моём проекте под названием "zlibwapi.dll from resources v.2" там тоже создан EXE с лишним одним байтом на конце, самое смешное, что там мы успешно скормили этот буфер NT-функциям и всё нормально было, функция RtlDecompressBuffer успешно схавала немного неправильный буфер (с лишним одним байтом на конце) и успешно вернуло идеально-правильный буфер, что самое смешное. А вот с дельта-функциями такое уже не пройдёт. Там требует идеально-правильный буфер изначально, иначе ошибка номер 13. Добавлено через 1 час 0 минут Ещё меня очень сильно удивило, что если создавать сжатые буфера из одного и того же файла с помощью CompressDeltaB то они всё время разные данные получаются... Из-за чего страдает CRC. 4 байта каких-то всё время отличаются. Неужели туда время записывается каждый раз новое, прям в буфер вшивается.
0
|
|
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
||||||
| 06.11.2024, 01:24 | ||||||
|
Ну наконец-таки, я сделал третью версию программки, для создания DLL из ресурсов.
Пришлось через CopyMemory насильно обрезать три байта в конце. Извините, это глюк майкрософта уже, я тут не при чём.
0
|
||||||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
||||||
| 06.11.2024, 01:50 | ||||||
|
А теперь вишинка на торте. Написал мини-версию этой программы для создания DLL. Здесь мы будем использовать чуть-чуть более старую версию DLL-библиотеки, которая занимаем всего 74Кб, версия 1.2.3, вместо 1.2.8, поэтому на выходе EXE теперь у нас получается всего 65536 байт! 65Кб! Это рекорд минимального размера EXE! Так как тут запакованный буфер занимает всего 39670 байт. Все контрольные суммы CRC32, мы конечно же, проверяем обязательно, чтобы исключить ошибки потери каких-то байтов. Мне итак приходится заниматься копированием через CopyMemory, ну а что поделаешь.. Ладно, вот новый код.
Код формы:
0
|
||||||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|
| 06.11.2024, 02:17 | |
|
А ещё можно знаешь как сделать? Можно например в папке вместе с программой распространять (копировать) самую новую библиотеку, а если этого файла вдруг не будет, то пусть тогда создаётся старая мини-версия 1.2.3 можно и так сделать, я только что подумал об этом. В любом случае в каталоге вместе с программой можно всегда распространять любую версию.
Добавлено через 30 секунд А можно и не делать этого, уже всё равно. Тут на вкус и цвет как бы. Добавлено через 56 секунд Главная задача выполнена по упаковке и распаковке буферов. Кстати я заметил что дельты пакуют файлы даже лучше чем сам ZIP. Добавлено через 24 секунды Но тесты ещё можно проводить конечно.
0
|
|
| 06.11.2024, 02:32 [ТС] | ||||||
|
На x64 чудо-функции запустить не получилось. Не пойму почему. Там где Long, он автоматически должен выравниваться до LongLong хоть в структуре, хоть в стеке. Пока так.
Кликните здесь для просмотра всего текста
0
|
||||||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|||
| 06.11.2024, 02:45 | |||
|
Добавлено через 2 минуты
1
|
|||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|||||
| 06.11.2024, 02:49 | |||||
|
Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 55 секунд
0
|
|||||
| 06.11.2024, 11:46 [ТС] | |||
|
Vba x64. В данном случае проверял в Автокаде. Я примерно понимаю из-за чего не идет. Чуть позже, думаю будет решение для x64
Добавлено через 21 минуту Ошибки можно по всякому выводить. Всегда есть вероятность порченного файла или еще чего. Лучше всего, наверное, когда функция сама определяет ошибку и еще выводит сообщение, чтобы не обрабатывать эту ошибку где-то во вне. Добавлено через 4 часа 4 минуты Добавлено через 2 минуты На Твинбейсике, по моему, возможно передавать структуры ByVal.. Там должен работать этот вариант Добавлено через 3 часа 50 минут В TwinBasic увы:
0
|
|||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
||||||
| 06.11.2024, 15:34 | ||||||
|
Придумал новый вариант кода для моего проекта "zlibwapi.dll from resources v.mini". Теперь мы не будем использовать CopyMemory для отрезания последних байт. Я вспомнил, что это можно делать стандартными средствами на VB6 без API с помощью ReDim Preserve. Слово Preserve там обязательно, иначе не работает, если просто ReDim.
1
|
||||||
|
Вернулся
1778 / 673 / 46
Регистрация: 10.09.2021
Сообщений: 2,820
|
|||
| 06.11.2024, 16:09 | |||
|
testuser2, эта функция проверяет существование функции внутри библиотеки DLL там "Is" надо потому что проверяется есть ли функция или нету функции, правда может надо было назвать IsFunctionDLL
Добавлено через 2 минуты testuser2, что ты прицепился к словам. я же не англичанин чтобы знать правописание ну. Добавлено через 1 минуту Добавлено через 4 минуты Добавлено через 4 минуты testuser2, нужно говорить простыми и понятыми словами, чтобы люди понимали, а не всякие там врапперы и ремарки...
0
|
|||
| 06.11.2024, 16:17 [ТС] | ||
|
0
|
||
| 06.11.2024, 16:17 | |
|
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык.
Возвращает он вот это:
https:/ / i. **********/ vqBWLe2. png
Нужную строчку в 3й колонке просто выдумал. .
Это. . .
|
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor.
Это. . .
|
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js.
В помощники взял Яндекс-Алису.
Было создано три зала на разные интересы.
исторические и ретро
сериал Хичкок. . .
|
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
|
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|