1392 / 849 / 92
Регистрация: 08.02.2017
Сообщений: 3,625
Записей в блоге: 2

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

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

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

Добавлено через 6 минут
Не, на 100 Мб вложения форум не потянул. Не получилось.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:01
1746 выдало в IDE
1851 в EXE
что эти цифры значат вообще?

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



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

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

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

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

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

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

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

Добавлено через 36 секунд
Цитата Сообщение от HackerVlad Посмотреть сообщение
Если ты будешь загружать из хвоста EXE у себя в коде данные то тоже начнёт отъедаться оперативка, это будет тогда одно и тоже. Вряд ли ты будешь заморачиваться с нарезанием на чанки.
А так не отжирается. Ты загрузил данные, обработал и освободил память.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
17.02.2025, 16:59
Цитата Сообщение от The trick Посмотреть сообщение
Для кого я это сейчас писал?
В taskmgr это не показывается. Только в других программах можно это увидеть. Пока ты не загрузишь ресурсы в коде.
0
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
17.02.2025, 17:02
Цитата Сообщение от HackerVlad Посмотреть сообщение
Только в других программах можно это увидеть.
И что это меняет? Как это опровергает это:
Цитата Сообщение от The trick Посмотреть сообщение
Секция ресурсов всегда отображается в память и всегда занимает виртуальную память, поэтому почти никогда не делают инсталляторы с данными в ресурсах. Представь 300МБ инсталлятор который при запуске "отжирает" 300 метров, на деле только ехе файл занимает память, а данные в хвосте игнорируются.
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru