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

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

29.10.2024, 02:49. Показов 18512. Ответов 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
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, а ты в семёрке проверял?
Разницы нет хоть в 7ке хоть в XP хоть в 11, хоть в линуксе, виртуальная память работает везде одинаково.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 15:27
в семёрке может и не показывает taskmgr я хз
но в ProcessHacker'е я действительно нашёл такое понятие как виртуальная память там больше 100 Мб получается, это правда
про диспетчер задач в семёрке тоже правда - ничего не показывает

Добавлено через 2 минуты
Цитата Сообщение от The trick Посмотреть сообщение
Там либо файл не в ресурсах лежит либо это фейк.
Файл там в ресурсах на 100 мегабайт и это не фейк. Я сам компилировал. У меня вот так вот. У меня пиковый рабочий набор всего 9 Мб. Могу прислать этот EXE если не веришь.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:36
Цитата Сообщение от HackerVlad Посмотреть сообщение
Файл там в ресурсах на 100 мегабайт и это не фейк. Я сам компилировал. У меня вот так вот. У меня пиковый рабочий набор всего 9 Мб. Могу прислать этот EXE если не веришь.
Не может такого быть. EXE файл парсится и все секции занимают виртуальную память. То что ты там запускаешь у себя - одному тебе известно. Могу предположить (по названию prjSFX) это проект где файл не в ресурсах, а в хвосте.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 15:45
The trick, ладно пришлю тебе и сам посмотришь, да в ресурсы я вшивал ну что ты я не знаю ну

Добавлено через 6 минут
Не, на 100 Мб вложения форум не потянул. Не получилось.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 15:53
HackerVlad,
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
Option Explicit
 
Private Sub Form_Load()
    Dim c As Collection
    Dim b() As Byte
    Dim n As Long
    
    On Error GoTo exit_
    
    Set c = New Collection
    
    ReDim b(1000000)
    
    Do
    
        c.Add b
        n = n + 1
        
    Loop While True
    
exit_:
    
    MsgBox n
    
End Sub
Вот запусти код у себя и убедись что с ресурсами у тебя пропорционально меньше выделений будет. В моем случае 1926 - 1825 = 101 - как раз на размер ресурсов.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:01
1746 выдало в IDE
1851 в EXE
что эти цифры значат вообще?

Добавлено через 3 минуты
всю оперативку засирать зачем, я не понял этого теста.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 16:03
HackerVlad, подумай головой.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:18
Вот посмотри на мой проект. Тест будет на 25 Мб, так как больше залить на форум не получается. Откомпилируй EXE запусти диспетчер задач в семёрке и убедись, что я не обманываю. 25 Мб не будет в памяти.
Вложения
Тип файла: 7z prjSFX.7z (24.63 Мб, 3 просмотров)
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:20
Всё, у меня 8 Мб только в памяти в taskmgr.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 16:21
При создании 32-битного процесса ему выделяется 2ГБ (можно больше) адресного пространства. В этом пространстве лежат все DLL, EXE, стеки потоков, кучи и любая другая выделяемая процессом память. Частный набор это как раз то что не принадлежит ни одному образу (массивы, строки, стеки и т.п. динамическая память, а также writeable-секции). Все типы памяти занимают адресное пространство (считай виртуальную память) и у тебя просто физически не будет возможности выделить памяти если у тебя EXE файл будет занимать 100МБ столько же сколько ты можешь выделить памяти без такого "жирного" файла. Кладя в ресурсы такие огромные файлы ты просто напросто отжираешь регион памяти который нельзя освободить, такие файлы нужно класть в конец файла (есть еще ньюансы с discardable секциями, но в VB6 никто так заморачиваться не будет).
Вот vmmap как раз и показывает сколько у тебя памяти занято, а сколько доступно. К примеру пустой проект с одной формой при запуске занимает 88МБ виртуальной памяти:



Причем стоит учесть что эта память фрагментирована, так к примеру нельзя выделить кусок целиком в 1ГБ, т.к. такого куска просто нет в памяти, но можно навыделять кучу поменьше вплоть почти до 2ГБ.

Так что твое утверждение:

Цитата Сообщение от HackerVlad Посмотреть сообщение
Ну я вынужден возразить. Сегодня спецом даже 100 Мб аж целых засунул в ресурсы для проверки, откомпилировал EXE и программа в памяти как занимала мои пару мегабайт так и стала занимать. Ничего не изменилось.
неверно.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:32
The trick, ладно, ну тогда остаётся загадкой почему обманывает мой taskmgr
А если засунуть в секцию .text тоже будет съедать из виртуальной памяти? Или только ресурсы отъедают?

Добавлено через 23 секунды
А если в секцию .data?
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 16:36
HackerVlad, везде в секциях будет отъедать. Не будет отъедать за пределами EXE.

Добавлено через 1 минуту
Цитата Сообщение от HackerVlad Посмотреть сообщение
The trick, ладно, ну тогда остаётся загадкой почему обманывает мой taskmgr
Ну возможно еще ты эти ресурсы не загружал.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:38
The trick, ты проверил мой проект-тест? у тебя в семёрке что показывает? 25 Мб что ли будет? У меня что глючная винда что ли?

Добавлено через 1 минуту
Цитата Сообщение от The trick Посмотреть сообщение
еще ты эти ресурсы не загружал
Конечно не загружал, проект с пустой формой считай без кода. Запускаешь EXE проверяешь в памяти в taskmgr ничего не происходит, память не разбухает на 25 Мб.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 16:43
Цитата Сообщение от HackerVlad Посмотреть сообщение
Конечно не загружал, проект с пустой формой считай без кода. Запускаешь EXE проверяешь в памяти в taskmgr ничего не происходит, память не разбухает на 25 Мб.
Ну а как ты с ресурсами собрался работать не загружая их? Конечно у тебя частный набор не увеличится, но память все равно отжирается, просто она не в частном наборе, а в маппинге.
Я тебе поэтому и скинул тест где ты выделяешь по 1МБ пока есть память чтобы показать что памяти на 100МБ меньше.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:52
Цитата Сообщение от The trick Посмотреть сообщение
Ну а как ты с ресурсами собрался работать не загружая их?
Жесть, а ты сразу не мог сказать, что ты имеешь ввиду что нужно загружать ресурсы в коде, блин ну это итак понятно что начнётся жрать оперативка. Я думал просто запустил EXE и всё, ты имеешь ввиду, и сразу память отожралась.

Добавлено через 52 секунды
Если ты будешь загружать из хвоста EXE у себя в коде данные то тоже начнёт отъедаться оперативка, это будет тогда одно и тоже. Вряд ли ты будешь заморачиваться с нарезанием на чанки.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 16:55
Цитата Сообщение от HackerVlad Посмотреть сообщение
Я думал просто запустил EXE и всё, ты имеешь ввиду, и сразу память отожралась.
Так и есть, память сразу отжирается. Для кого я это сейчас писал?

Добавлено через 36 секунд
Цитата Сообщение от HackerVlad Посмотреть сообщение
Если ты будешь загружать из хвоста EXE у себя в коде данные то тоже начнёт отъедаться оперативка, это будет тогда одно и тоже. Вряд ли ты будешь заморачиваться с нарезанием на чанки.
А так не отжирается. Ты загрузил данные, обработал и освободил память.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:59
Цитата Сообщение от The trick Посмотреть сообщение
Для кого я это сейчас писал?
В taskmgr это не показывается. Только в других программах можно это увидеть. Пока ты не загрузишь ресурсы в коде.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 17:02
Цитата Сообщение от HackerVlad Посмотреть сообщение
Только в других программах можно это увидеть.
И что это меняет? Как это опровергает это:
Цитата Сообщение от The trick Посмотреть сообщение
Секция ресурсов всегда отображается в память и всегда занимает виртуальную память, поэтому почти никогда не делают инсталляторы с данными в ресурсах. Представь 300МБ инсталлятор который при запуске "отжирает" 300 метров, на деле только ехе файл занимает память, а данные в хвосте игнорируются.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 19:39
The trick, ну ок, я понял, значит отъедает память, ок

Добавлено через 5 минут
The trick, а в vb6 ограничивает размер компилируемого exe в 2Гб?

Добавлено через 42 секунды
Или и того меньше наверное)))) не пробовал прям гигабайтами целыми никогда)

Добавлено через 2 часа 10 минут
Я протестировал работу класса от The Trick, где в хвост EXE записываются файлы, так вот при чтении этих файлов, тоже код класса довольно много отъедает виртуальной памяти, пик даже в три раза превышает размер вложения в EXE (я тестировал на 25 Мб) у меня больше чем 75 Мб пик идёт, пока не понял почему.

Добавлено через 1 минуту
Но зато понравилось что имена файлов в юникоде хранятся, это интересная особенность, по сути можно было бы сделать само-распаковывающийся архив на этой технологии, а буфера файлов распаковывать любым алгоритном, не важно каким, сам список файлов вшивается по технологии The Trick это интересно конечно.

Добавлено через 1 минуту
Не понравилось только то что к EXE прибалвяется около 40 Кб по размеру класса. Если писать SFX своё EXE то плюс 40 Кб это много

Добавлено через 2 минуты
Хотя тогда пришлось бы допиливать этот класс и вшивать ни только имена файлов но и дату время и атрибуты файлов... Короче не подойдёт для SFX exe

Добавлено через 2 минуты
Но суть в том, что эта система точно так же отъедает и виртуальную память и оперативную, в чём разница тогда, в ресурсы зашью, в секцию .text или в хвост EXE
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
17.02.2025, 19:44
Цитата Сообщение от HackerVlad Посмотреть сообщение
Но суть в том, что эта система точно так же отъедает и виртуальную память и оперативную, в чём разница тогда, в ресурсы зашью, в секцию .text или в хвост EXE
В том о чем уже не раз писалось. Одно дело когда у тебя 100МБ отъедаются и все и больше ты их не вернешь, а другое дело когда ты загрузил нужные данные и освободил 100МБ. К примеру у тебя какая-то БД, ты загрузил только нужные данные и выгрузил их.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Короче не подойдёт для SFX exe
SFX это вообще-то архив. В самом простом случае берешь ZIP файл и вставляешь в конец EXE, а в коде распаковываешь его. А класс позволяет хранить файлы в конце без всякого сжатия, такой exe ни один архиватор не откроет.

Цитата Сообщение от HackerVlad Посмотреть сообщение
Не понравилось только то что к EXE прибалвяется около 40 Кб по размеру класса. Если писать SFX своё EXE то плюс 40 Кб это много
Это плата за универсальность - можно хранить множество типов данных и быстро их загружать. И не 40 КБ, а 32.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.02.2025, 19:44
Помогаю со студенческими работами здесь

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? Какие нужны библиотеки и где их взять? заранее спасибо.


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

Или воспользуйтесь поиском по форуму:
260
Ответ Создать тему
Новые блоги и статьи
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