Работа с zip архивами29.10.2024, 02:49. Показов 22188. Ответов 283
Метки нет (Все метки)
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.
Добавлено через 1 минуту кстати словосочетание zip-архивами в названии форум блочит почему-то )Добавлено через 6 минут На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
|
||||||
| 29.10.2024, 02:49 | |
|
Ответы с готовыми решениями:
283
Работа с ZIP-архивами - распаковка файлов Автоматизировать заполнение "Графика выполненных работ по месяцам" Задания из лаб.работ |
| 04.11.2024, 17:32 [ТС] | |||||||
|
Добавлено через 7 минут Составил декларацию CreateDeltaB, надеюсь без ошибок Кликните здесь для просмотра всего текста
0
|
|||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||||||
| 04.11.2024, 18:46 | ||||||||
|
testuser2, а зачем ты занимаешься дельтами?
Добавлено через 22 минуты Добавлено через 4 минуты https://learn.microsoft.com/ru... compressor Добавлено через 1 минуту Ну значит нужно сначала определять версию ОС если Windows 8 и выше то использовать cabinet.dll иначе использовать zlibwapi.dll. Для Windows 10 например тогда можно вообще не создавать файл zlibwapi.dll даже в корне с программой. Добавлено через 1 минуту Ну и бонус от меня - класс для работы с Cabinet.dll начиная от Windows 8
Добавлено через 10 минут testuser2, так если функция CreateCompressor появилась только начиная от Windows 8 то я не смогу значит написать модуль для упаковки и распаковки данных твоим способом через Cabinet Добавлено через 1 минуту Добавлено через 2 минуты testuser2, а дельты твои работают начиная от Windows Vista? Добавлено через 26 минут testuser2, так например даже если ты упакуешь/распакуешь буфер своими дельтами, то в XP это уже работать не будет, и буфер уже там никак не распакуешь. Единственный универсальный вариант это мой модуль к ntdll.dll где используется хоть и не сильное сжатие но хоть какое-то и зато быстрое. Добавлено через 1 минуту testuser2, я нашёл ещё очень интересную тему где сравниваются алгоритмы сжатия, библиотеки для сжатия даются, и сравниваются скорости https://www.vbforums.com/showt... -solutions Добавлено через 43 секунды testuser2, Compression_5.zip скачай с иностранного форума там очень интересно
1
|
||||||||
| 04.11.2024, 18:51 [ТС] | ||||||||||||
|
Кликните здесь для просмотра всего текста
1
|
||||||||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||
| 04.11.2024, 18:59 | |||
|
Добавлено через 4 минуты
0
|
|||
| 04.11.2024, 19:04 [ТС] | ||||||||||||
Добавлено через 2 минуты
0
|
||||||||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 04.11.2024, 19:10 | |
|
testuser2, хорошие новости: я проверил в XP тоже работает
а ты можешь приложить код для теста DLL Добавлено через 1 минуту testuser2, о так напиши тогда модуль для упаковки/распаковки буфера на дельтах (если не будет глючить и зависать то можно пользоваться) Добавлено через 28 секунд на дельтах же лучше сжимает получается ну
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 04.11.2024, 19:27 | ||
|
Там вроде такие функции FciCreate FciAddFile FciFlushCabinet FciFlushFolder FciDestroy Добавлено через 27 секунд Типа как создание и распаковка CAB-файлов возможно и буфера просто без файлов можно
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 04.11.2024, 19:29 | |
|
Вот я прикладываю скриншот, чтобы ты понимал какие функции есть для Cabinet.dll в семёрке
1
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|
| 04.11.2024, 22:02 | |
|
Создание CAB думаю используется эта API: https://learn.microsoft.com/en... -fcicreate
Добавлено через 3 минуты testuser2, вот например пример использования https://www.viathinksoft.com/codelib/206 Добавлено через 2 минуты testuser2, но это очень сложные API по сравнению с новой версией библиотеки Cabinet.dll начиная от Windows 8 Добавлено через 2 часа 18 минут testuser2, полная документация по дельта-сжатию https://learn.microsoft.com/en... (v=msdn.10)
1
|
|
| 05.11.2024, 13:36 [ТС] | ||||||||
|
Компрессия/декомпрессия буфера DeltaB
Кликните здесь для просмотра всего текста
Добавлено через 5 часов 34 минуты Скорее всего DeltaB использует ту же компрессию, что и Cab, просто добавляет какую-то описательную информацию Добавлено через 12 минут
1
|
||||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 05.11.2024, 15:42 | ||
|
Буфер из файла CAB выдернуть посмотреть, и тут в дельте Добавлено через 50 секунд Буфер выдернуть из CAB легко на Windows 8 API я не смогу, для меня в семёрке это слишком сложно Добавлено через 33 минуты testuser2, с твоего позволения у меня есть несколько замечаний 1. Не объявлена функция CopyMemory 2. Функции которые возвращают байтовый массив - это не очень удобные функции, так как в случае ошибки будет 9 ошибка что массив не инициализирован, мне больше нравится когда функция возвращает не массив а True или False, но это дело вкусов уже может Однако у меня как раз сейчас и выскочила 9 ошибка, буду думать почему не работает и почему массив не наполняется Добавлено через 2 минуты testuser2, смотри какую ошибку я сразу нашёл: на маленьком файле всё успешно, а вот когда я буфер поместил файл объёмом 40 мегабайт, то сразу всё слетело и 9 ошибка
0
|
||
| 05.11.2024, 15:51 [ТС] | ||
|
0
|
||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||
| 05.11.2024, 16:03 | ||
|
testuser2, так же мои тесты показывают, что хоть и компрессия у дельты лучше, однако скорость хуже чем у RtlCompressBuffer. С помощью RtlCompressBuffer 0млск, а с помощью дельты целых 150млск для маленького файла zlibwapi.dll
Добавлено через 57 секунд Добавлено через 1 минуту Ну хотя главное чтобы распаковка с помощью дельты была быстрой, а тут вроде порядок Сейчас будем думать что не так с большими файлами!!! Добавлено через 8 минут testuser2, сам подумай: если функция выполнилась неуспешно, с ошибкой, то возвращать массив это тупость (так как массива нет и будет 9 ошибка) лучше всего возвращать True или False и тогда можно будет хотябы проверить что если функция вернула True то только тогда шерстить наполненный массив. Иначе, по твоей системе возвращения байтового массива мне придётся делать дополнительную проверку на: либо наличие 9 ошибка, либо на то наполнен ли вообще был массив с помощью разных хаков, а это не так и просто.
0
|
||
| 05.11.2024, 16:21 [ТС] | ||||||||
|
Сейчас проверл на файле 20 мб текстовом файле, без ошибки, такой результат. Дельта медленная, но получше жмет
Добавлено через 9 минут TCCAB = record это зашквар какой-то
1
|
||||||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||
| 05.11.2024, 16:51 | ||||
|
Добавлено через 22 секунды Добавлено через 5 минут Добавлено через 17 минут testuser2, неужели в функции CreateDeltaB все параметры необязательные?
0
|
||||
| 05.11.2024, 17:15 [ТС] | ||||
|
Проверил на 68 мб, действительно не отрабатывает компрессию. Там есть в пояснении
Добавлено через 3 минуты Если же придаться изучению дельта-функций, полагаю, можно погрязнуть в тине не смежных со сжатием вопросов, так и не достигнув желаемого понимания
0
|
||||
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
||||
| 05.11.2024, 17:56 | ||||
|
Добавлено через 38 секунд Добавлено через 15 минут Добавлено через 5 минут Смотри вот в функции RtlCompressBuffer есть параметр UncompressedChunkSize где у меня в моём модуле устанавливается 4096 (я уже не помню почему ставил именно 4096) то есть там чанки уже есть в этих функциях похоже. А в дельте нет чанок?
0
|
||||
| 05.11.2024, 17:59 [ТС] | |
|
Описание параметнов DeltaB
Кликните здесь для просмотра всего текста
Параметры
FileTypeSet [в] Набор типов файлов, который будет использоваться для Create. См. также Наборы типов файлов. УстановитьФлаги [в] Флаги, которые будут использоваться во время создания, в дополнение к флагам по умолчанию. СбросФлагов [в] Флаги по умолчанию, которые необходимо сбросить во время создания. Источник [в] Структура DELTA_INPUT, содержащая указатель на буфер, содержащий исходные данные. Цель [в] Структура DELTA_INPUT, содержащая указатель на буфер, содержащий целевые данные. SourceOptions [в] Зарезервировано. Передайте структуру DELTA_INPUT с Editable, установленным на FALSE, lpStart, установленным на NULL, и uSize, установленным на 0. TargetOptions [в] Зарезервировано. Передайте структуру DELTA_INPUT с Editable, установленным на FALSE, lpStart, установленным на NULL, и uSize, установленным на 0. GlobalOptions [in] Зарезервировано. Передайте структуру DELTA_INPUT с lpStart, установленным в NULL, и uSize, установленным в 0. lpTargetFileTime [in] Временная метка, установленная на целевом файле после delta Apply. Если NULL, то целевой временной меткой будет текущее время во время Create. HashAlgId [в] ALG_ID алгоритма, который будет использоваться для генерации целевой подписи. Некоторые специальные значения: 0 = Нет подписи 32 = 32-битный CRC, определенный в msdelta.dll lpDelta [out] Указатель на структуру DELTA_OUTPUT, куда должна быть записана дельта.
0
|
|
|
Вернулся
1748 / 644 / 45
Регистрация: 10.09.2021
Сообщений: 2,786
|
|||||||||||
| 05.11.2024, 18:05 | |||||||||||
|
testuser2, твою функцию упаковки лучше переделать так:
Хотя в моих функциях NT вообще буфер перезаписывался старый который был, но как лучше тут делать я уже не знаю.
0
|
|||||||||||
| 05.11.2024, 18:05 | |
|
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
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
Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
|