Работа с zip архивами29.10.2024, 02:49. Показов 18178. Ответов 282
Метки нет (Все метки)
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.
Добавлено через 1 минуту кстати словосочетание zip-архивами в названии форум блочит почему-то )Добавлено через 6 минут На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
|
||||||
| 29.10.2024, 02:49 | |
|
Ответы с готовыми решениями:
282
Работа с ZIP-архивами - распаковка файлов Автоматизировать заполнение "Графика выполненных работ по месяцам" Задания из лаб.работ |
| 31.10.2024, 19:12 [ТС] | ||
|
0
|
||
|
Модератор
|
||||||||||||
| 31.10.2024, 20:32 | ||||||||||||
С упаковкой там ньюансы как раз в том что она в отдельном потоке запускается и нет механизма (документированного) уведомления о завершении + отображается диалог с прогрессом при длительных операциях. Если почитать ту тему код из которой я приводил - там как раз и пытались решить проблему эту. Для Win10 и еще вроде каких-то я не помню подробностей уведомление можно получить разными способами, т.к. я реверсил эту вещь не на всех системах, но точно знаю что через Shell-notify можно на WIN10 это сделать. Вот кусок кода из проекта одного:
Кстати на 10-ке у себя глянул, там вроде как можно через IContextMenu::InvokeCommand сделать без всяких костылей в основном потоке.
1
|
||||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 31.10.2024, 20:47 | |
|
docx значит читаете? это тоже зип, да?
0
|
|
| 01.11.2024, 02:04 [ТС] | ||
|
The trick, спасибо, это отличное крутое дополнение темы, хоть и не очень понятное. Лимит количества ответов видимо заполнен для данной темы, хотя можно было бы поставить это также ответом.
Есть еще нюанс, когда документ сохраняешь, он на самом деле перезаписывается на новом месте, а старый удаляется. Если перед сохранением делать жесткую ссылку на файл перед сохранением, то можно сохранить старую версию файла.
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 01.11.2024, 04:46 | ||
|
Добавлено через 5 минут Лучше бы The Trick скинул полностью рабочий проект, чтобы наглядно было видно, а то разрозненные куски кода мне тоже не понятны. Тем более его код не работал у меня когда я пытался.
0
|
||
| 01.11.2024, 18:52 [ТС] | ||
|
Добавлено через 32 минуты Нашел примерчики Добавлено через 4 часа 5 минут Как я понял (из всего что я вычитал), zlib не поддерживает перезапись/удаление внутренних файлв. нужно полностью перезаписывать весь архив для модификации файлов.
1
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 01.11.2024, 18:58 | |
|
1
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 01.11.2024, 19:31 | ||
|
Добавлено через 18 минут В файловой системе же не может быть два одинаковых файла (это была бы ошибка файловой системы уже). А в архивах разве это возможно тоже?
0
|
||
| 02.11.2024, 02:45 [ТС] | |||
|
0
|
|||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 02.11.2024, 03:04 | |
|
Чисто теоритически должен быть способ как поменять файл внутри архива прямой перезаписью внутри файла ZIP находя нужный файл нужное смещение в байтах но фишка в том что там перезаписывать нужно ни только буфер но и описывающею структуру надо ли это вообще ещё и crc поменяется
0
|
|
| 02.11.2024, 07:38 [ТС] | |
|
Сделал жесткую ссылку на zip-файл, добавил в него файл с помощью zlibwapi, жесткая ссылка не разъединилась с файлом. Затем скопиовал в этотархив файл с помощью проводника, ссылка, также осталась связана с файлом. Что говорит о том, что информация дописывалась в один и тот же файл. Одако кодга я в проводнике удалил один файл в архиве, то связь файла и ссылки пропала, что свидетельствует о том, что после удаления файл полностью перезаписывается в новое место, о чем говорил locm. Также происходит каждый раз, когда сохраняются изменения в файлах xlsx, docx и т.д., они полностью перезаписываются. Таковы издержки использования zip-сжатия, хотя фактически может быть как таковых издержек и нет, поскольку сжатая зип-папка можте весить меньше отдельных составляющих ее частей.
0
|
|
| 03.11.2024, 15:27 [ТС] | |
|
Модуль автоустановки zlibwapi.dll в каталог программы, в случае ее отсутствия в системе. Очень капризный модуль, не полчилось использовать его в vba, документ отказался сохранятся в виду непредвиденных причин, и вот сейчас, он оказался слишком длинным, чтобы его запостить на форум. Наверное я очень крутой программист, раз такие длинные модули пишу
1
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 03.11.2024, 15:34 | |
|
0
|
|
| 03.11.2024, 15:35 [ТС] | |
|
Использование: вызвать процедуру ZlibWapi_Check при загрузке формы или непосрдественно перед работой с архивами. Процедура проверяет наличие zlibwapi и в случае ошибки вызова функции zlibVersion() (возвращает указатель на строку текущей версии библиотеки) извлекает файл библиотеки из "ресурсов" в папку программы.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 03.11.2024, 15:44 | ||
|
testuser2, как ты это сделал? как ты сделал строку B64?
И зачем поставил Return в конце процедуры ZlibWapi_1_2_8_Install? Добавлено через 57 секунд Добавлено через 26 секунд EXE 278 Кб получился Добавлено через 56 секунд Но моя предыдущая технология ещё больше раздувала EXE где был описан каждый байт, для создания файла... Добавлено через 18 секунд Я ничего не знал про base64 если честно
0
|
||
| 03.11.2024, 15:49 [ТС] | |||
|
Сам модуль 126 кб, он в Ansi. Добавлено через 2 минуты Да, действительно, открыл в листере в режиме utf-16 там этот текст. Может быть попробовать его загонят в константу..
0
|
|||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 03.11.2024, 15:53 | |
|
testuser2, в VB6 создать строку в ANSI это не так просто!
1
|
|
| 03.11.2024, 15:56 [ТС] | |
|
Не получится константой, там же надо собирать строку из частей, а загнать разом такую строку в переменную нельзя в коде..
0
|
|
| 03.11.2024, 15:56 | |
|
Помогаю со студенческими работами здесь
80
access и zip архив Как распаковать ZIP-файл в 7z?
Замена файла в zip архиве при совпадении имени Как сделать архив zip? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|