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

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

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

Студворк — интернет-сервис помощи студентам
Из всего, что попадалось по теме сжатия/распаковки 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, автоматизировать заполнение "Графика выполненных работ по месяцам". Из диапазона дат в...

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

283
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
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
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
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
1406 / 864 / 93
Регистрация: 08.02.2017
Сообщений: 3,680
Записей в блоге: 2
23.11.2024, 04:25  [ТС]
Цитата Сообщение от HackerVlad Посмотреть сообщение
а если помещать в ресурсы, то все ресурсы загружаются в оперативку вместе с запуском exe?
Это легко проверить сравнивая "working set" в том и другом случае

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

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

Вот тебе пример 2 файла, у одно 100МБ ресурсы, а у другого нет.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.02.2025, 15:06
The trick, так виртуальная память же не оперативная какая разница сколько там EXE занимает, пусть хоть Гигабайт, на что это повлияет? С оперативки же не отъедает.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
17.02.2025, 15:08
HackerVlad, я тебе дал ссылку прочитай ту дискуссию. Приложения используют только виртуальную память. Возьми и выделяй память и посмотри сколько в одном случае тебе удастся выделить и в другом если ты опять собрался спорить о том в чем не разбираешься.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.02.2025, 15:15
The trick, у меня в диспетчере задач нигде не показывает что 100 Мб отъедает. Но в ProcessHacler'е всё же нашёл такое понятие как виртальная память, хз что это такое вообще. Но почему в обычном диспетчере задач у меня ничего не показывается как у тебя.
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
17.02.2025, 15:17
HackerVlad, потому что нужно выбрать информацию которую диспетчер задач выводит.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.02.2025, 15:17
The trick, я выбрал прям все столбцы с памятью все галочки отметил с памятью
Миниатюры
Работа с zip архивами  
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 79
17.02.2025, 15:21
HackerVlad, ну и что ты запускаешь? Там либо файл не в ресурсах лежит либо это фейк.
0
Вернулся
 Аватар для HackerVlad
1751 / 647 / 45
Регистрация: 10.09.2021
Сообщений: 2,800
17.02.2025, 15:22
The trick, а ты в семёрке проверял?
0
Модератор
10061 / 3906 / 885
Регистрация: 22.02.2013
Сообщений: 5,856
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru