Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/1: Рейтинг темы: голосов - 1, средняя оценка - 5.00
1386 / 842 / 91
Регистрация: 08.02.2017
Сообщений: 3,588
Записей в блоге: 1

Работа с zip архивами

29.10.2024, 02:49. Показов 18518. Ответов 282
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Из всего, что попадалось по теме сжатия/распаковки ZIP наиболее интересные были примеры с использованием библиотеки Zlib. Оригинальная zlib использует cdecl экспорт функций, но есть реализация zlibwapi.dll, которую можно использовать в VB. Вот хороший пример использования. Там можно увидеть как сжть/распаковать массив байтов, но вот беда, очень сложно найти пример под VB с более обширным использованием, способной на большее, данной либы, которая не есть простая, там есть функции с использованием множества параметров констант и длинных структур, которые чтобы узнать наверное надо долго копатся в сишных заголочниках. Но HackerVlad в личной беседе говорил, что у него есть исходники с использованием данной библиотеки, поэтому любезно прошу его поделиться данной информацией.

Добавлено через 1 минуту
кстати словосочетание zip-архивами в названии форум блочит почему-то )

Добавлено через 6 минут
На одном форуме есть хороший пример испльзования функций zlib для извлечения/распаковки отдельных файлов, там
Кликните здесь для просмотра всего текста
обсуждался какой-то экзотический ЯП Clarion, но очень наглядно
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
! Источнег: https://forum.clarionlife.net/viewtopic.php?t=2389
! Для добавления в архив PwlZip ваш пароль
ZipHandle = zipOpen(NEW_ZIPPACK, 0)
If EncryptFlag = 1
Res# = zipOpenNewFileInZip3(ZipHandle, PATH_CURZIP, Zinfo, 0, 0, 0, 0, Comment, Z_DEFLATED, CompressionFlag,0,-15,8,0,PwlZip,0)
Else
Res# = zipOpenNewFileInZip(ZipHandle, PATH_CURZIP, Zinfo, 0, 0, 0, 0, Comment, Z_DEFLATED, CompressionFlag)
.
 
!Для чтения из архива
ZipHandle = unzOpen(PATH_INFILE_PACK)
LocRes1=UnzGoToFirstFile(ZipHandle)
If unzGetCurrentFileInfo(ZipHandle,FinFo,PATH_NAMEUPD_TMP,Size(PATH_NAMEUPD_TMP),0,0,Comment,Size(Comment)).
If FinFo.Flag = 3 !признак шифрованного zip по крайней мере так я понял после мыкания с архивами
LocRes2 = unzOpenCurrentFilePassword(ZipHandle,PwlZip)
Else
LocRes2 = UnzOpenCurrentFile(ZipHandle)

Здесь подробное описание функций, структур и констант, однако я не нашел там unzGetCurrentFileInfo и т.п.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2024, 02:49
Ответы с готовыми решениями:

Работа с ZIP-архивами - распаковка файлов
Привет, уважаемый ALL! Подскажите, как можно работать с zip архивами из VBA? Стоит задача: 1) прочитать из архива...

Автоматизировать заполнение "Графика выполненных работ по месяцам"
Используя готовую рабочую книгу Blank1.xls, автоматизировать заполнение "Графика выполненных работ по месяцам". Из диапазона дат в...

Задания из лаб.работ
Надоедаю наверное уже всем...

282
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
22.11.2024, 18:51
Студворк — интернет-сервис помощи студентам
Я осмелюсь продолжить эту тему, так как я нашёл новый способ, новую технологию создания библиотеки zlibwapi.dll из ресурсов EXE-файла! Это просто невероятная фантастика! Оказывается, что если поместить любой CAB файл внутрь ресурсов своего EXE то получается "Непрерывный SFX CAB Архив" а вы об этом знали? Я сам не знал!!! И после этого Total Commander начинает открывать/читать ваш exe-файл как архив, через комбинацию клавиш Ctrl+PageDown. Я просто в шоке если честно, я случайно об этом узнал сейчас, просто решил попробовать засунуть в ресурсы CAB-файл.

The Trick, помню также говорил про самораспаковывающий SFX свой EXE он тоже как-то делал, но там явно по другому было!!!

А тут так просто! Просто взял и добавил в ресурсы под любым именем просто CAB-файл и всё! И вуаля! Магия! Операционная система теперь думает, что это SFX-архив! Я если честно, до сих пор нахожусь в шоке от этого!!!

И кстати я теперь решил написать 4 версию программы zlibwapi.dll from resources. Я решил, что не нужны теперь вообще никакие вспомогательные модули для распаковки данных. Теперь будет распаковывать всего одной функцией ExtractFiles так как теперь у нас в ресурсах зашит CAB-файл.

Идея до ужаса проста:

1. Загружаем из ресурсов наш CAB-файл в байтовый массив
2. Создаём временный файл под названием zlibwapi.dl_
3. Распаковываем этот CAB-архив zlibwapi.dl_ в zlibwapi.dll
4. Удаляем временный файл zlibwapi.dl_

И никакие скрипты, никакие сложные моудли и никакие сложные технологии для распаковки данных нам теперь точно не нужны!!! Почему я решил именовать файл как zlibwapi.dl_? А я просто вспомнил, как раньше часто в разных дистрибутивах, особенно в майкрософтовских, были такие упакованные файлы с расширением dl_ или ex_ где просто лежат эти файлы для распаковки инсталятором.

Вот и всё! Теперь новая версия этой программы этого exe-файла кстати и весит меньше! Рекорд всего 110 592 байт.

Код программы будет теперь, в основном, только в форме. Код теперь ну совсем маленький:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Option Explicit
Private Declare Function ExtractFiles Lib "advpack.dll" Alias "ExtractFilesA" (ByVal CabName As String, ByVal ExpandDir As String, ByVal Flags As Long, ByVal FileList As String, lpReserved As Any, ByVal Reserved As Long) As Long
Private Declare Function RtlComputeCrc32 Lib "ntdll.dll" (ByVal dwInitial As Long, ByVal pData As Long, ByVal iLen As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetTickCount Lib "kernel32" () As Long
 
Private Function Crc32Api(tBuff() As Byte) As Long
    Crc32Api = RtlComputeCrc32(0, VarPtr(tBuff(0)), UBound(tBuff) + 1)
End Function
 
Private Function CreatingDLL() As Boolean
    Dim FileNo As Integer
    Dim buf() As Byte
    Dim dll() As Byte
    
    buf = LoadResData(101, "DLL") ' Загружаем буфер из ресурсов
    
    ReDim dll(85538)
    CopyMemory dll(0), buf(0), 85539 ' Копируем только 85539 байт
    
    If Crc32Api(dll) = &HF7C8B4A4 Then ' Проверить CRC сжатого буфера
        On Error Resume Next
        
        Err.Clear
        FileNo = FreeFile
        
        Open App.Path + "\zlibwapi.dl_" For Binary As FileNo ' Создадим временный файл
            Put #FileNo, , dll
        Close FileNo
        
        If Err.Number > 0 Then Exit Function
        
        ExtractFiles App.Path & "\zlibwapi.dl_", App.Path, 0, "zlibwapi.dll", 0, 0 ' Извлечь файл
        Kill App.Path & "\zlibwapi.dl_" ' Удалить временный файл
        If Err.Number = 0 Then CreatingDLL = True
    End If
End Function
 
Private Sub Command1_Click()
    Dim tick As Long
    Dim result As Boolean
    
    If IsDLLFunction("zlibwapi.dll", "zlibVersion") = False Then ' Не найдена библиотека либо функция в библиотеке
        tick = GetTickCount
        result = CreatingDLL ' Создать DLL
        Print GetTickCount - tick & " ml" ' Измерить время (у меня 0 млск)
        
        MsgBox "Создание библиотеки: " & result
    Else
        MsgBox "Библиотека уже существует!"
    End If
End Sub
Миниатюры
Работа с zip архивами   Работа с zip архивами   Работа с zip архивами  

Работа с zip архивами  
Вложения
Тип файла: zip zlibwapi.dll from resources v.4.zip (176.0 Кб, 4 просмотров)
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
22.11.2024, 20:48
Вы знаете, что это значит!? Это значит, что можно создавать самораспаковывающийся SFX-архив в своём EXE на VB6 так просто!!! И очень просто извлекать содержимое всего одной простой функцией ExtractFiles. Можно писать даже инсталяторы!!!

Добавлено через 20 минут
Я только что попробовал точно так же и ZIP-архив создаётся, оказывается!

Добавлено через 31 секунду
SFX ZIP архив я имею ввиду, если в ресурсы зашить зипку и скомпилировать EXE

Добавлено через 2 минуты
И SFX-RAR архив тоже точно так же создаётся! Удивительно просто!

Добавлено через 1 час 19 минут
The trick, если файлы помещать не в ресурсы, а если записывать в хвост exe через твой класс, через твой проект EOFData то тогда файлы эти не загружаются в оперативку, так? а если помещать в ресурсы, то все ресурсы загружаются в оперативку вместе с запуском exe?

но с другой стороны, если помещать файл в хвост, а не в ресурсы, то тогда как потом самому программным кодом на vb6 эти файлы извлекать?
0
1386 / 842 / 91
Регистрация: 08.02.2017
Сообщений: 3,588
Записей в блоге: 1
23.11.2024, 04:25  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
а если помещать в ресурсы, то все ресурсы загружаются в оперативку вместе с запуском exe?
Это легко проверить сравнивая "working set" в том и другом случае

Добавлено через 19 минут
Цитата Сообщение от HackerVlad Посмотреть сообщение
то тогда как потом самому программным кодом на vb6 эти файлы извлекать?
Добавляешь класс The trick-а в проект. Далее его сначала надо инициализировать в собственной среде Initialize(App.Hinstanse) потом получаешьь данные с помощью пропа FileData("Имя файла")..
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
23.11.2024, 07:39
Цитата Сообщение от testuser2 Посмотреть сообщение
Добавляешь класс The trick-а в проект. Далее его сначала надо инициализировать в собственной среде Initialize(App.Hinstanse) потом получаешьь данные с помощью пропа FileData("Имя файла")..
А ты уже так пробовал?
0
1386 / 842 / 91
Регистрация: 08.02.2017
Сообщений: 3,588
Записей в блоге: 1
23.11.2024, 08:19  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
А ты уже так пробовал?
Да, работает "как часики"
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 04:53
Цитата Сообщение от The trick Посмотреть сообщение
Секция ресурсов всегда отображается в память и всегда занимает виртуальную память, поэтому почти никогда не делают инсталляторы с данными в ресурсах. Представь 300МБ инсталлятор который при запуске "отжирает" 300 метров, на деле только ехе файл занимает память, а данные в хвосте игнорируются.
Ну я вынужден возразить. Сегодня спецом даже 100 Мб аж целых засунул в ресурсы для проверки, откомпилировал EXE и программа в памяти как занимала мои пару мегабайт так и стала занимать. Ничего не изменилось.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 11:04
Цитата Сообщение от HackerVlad Посмотреть сообщение
Ну я вынужден возразить. Сегодня спецом даже 100 Мб аж целых засунул в ресурсы для проверки, откомпилировал EXE и программа в памяти как занимала мои пару мегабайт так и стала занимать. Ничего не изменилось.
Неправда:
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 14:57
The trick, слушай в диспетчере задач ничего не изменилось в объёме занимаемой памяти для этого EXE
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 14:59
HackerVlad, изменилось
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 15:02
посмотрел ещё в другой программе в Process Hacker, на всякий случай, там EXE занимает 4.63 Мб не так уж и много
нигде не написано чтобы жрало 100 Мб

Добавлено через 58 секунд
я тебе и сам могу скрины поскидывать где программа занимает всего пару мегабайтов в оперативной памяти
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:02
HackerVlad, потому что ты не то смотришь. Читай.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:04
Цитата Сообщение от HackerVlad Посмотреть сообщение
я тебе и сам могу скрины поскидывать где программа занимает всего пару мегабайтов в оперативной памяти
Не надо ничего мне кидать, ты не то смотришь:

Вот тебе пример 2 файла, у одно 100МБ ресурсы, а у другого нет.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 15:06
The trick, так виртуальная память же не оперативная какая разница сколько там EXE занимает, пусть хоть Гигабайт, на что это повлияет? С оперативки же не отъедает.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:08
HackerVlad, я тебе дал ссылку прочитай ту дискуссию. Приложения используют только виртуальную память. Возьми и выделяй память и посмотри сколько в одном случае тебе удастся выделить и в другом если ты опять собрался спорить о том в чем не разбираешься.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 15:15
The trick, у меня в диспетчере задач нигде не показывает что 100 Мб отъедает. Но в ProcessHacler'е всё же нашёл такое понятие как виртальная память, хз что это такое вообще. Но почему в обычном диспетчере задач у меня ничего не показывается как у тебя.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:17
HackerVlad, потому что нужно выбрать информацию которую диспетчер задач выводит.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 15:17
The trick, я выбрал прям все столбцы с памятью все галочки отметил с памятью
Миниатюры
Работа с zip архивами  
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:21
HackerVlad, ну и что ты запускаешь? Там либо файл не в ресурсах лежит либо это фейк.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 15:22
The trick, а ты в семёрке проверял?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:24
Вот на 7ке все тоже самое.
Миниатюры
Работа с zip архивами  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2025, 15:24
Помогаю со студенческими работами здесь

access и zip архив
Привет всем! Подскажите... если есть возможность сохранение файла в zip архив Dim FileHeder As String Dim filePath As String ...

Как распаковать ZIP-файл в 7z?
'При помощи VBA WinRAR распаковывает архив в папку … q = Адрес_сохранения_файла 'путь к каталогу, то есть к папке, в конце пути для...

ребята!завтра надо сдать работу,а без этих работ никак((
алгоритмы линейной структуры 1) СОСТАВИТЬ ПРОГРАММУ ВЫЧИСЛЕНИЯ СРЕДНЕГО ЗНАЧЕНИЯ ТРЕХ ВЕЛИЧИН 2) ПОДСЧИТАТЬ И ВЫВЕСТИ НА ЭКРАН СУММУ И...

Замена файла в zip архиве при совпадении имени
Есть несколько excel файлов. например, 1.xls, 2.xls, 3.xls Есть куча zip архивов. например, A (1.xls), B (1.xls,5.doc,3.doc), C (3.xls),...

Как сделать архив zip?
Как сделать архив zip? Какие нужны библиотеки и где их взять? заранее спасибо.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
240
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru