|
Вопрощающий
|
|
Создание (+распаковка) CAB архива11.10.2009, 19:26. Показов 10678. Ответов 130
Метки cabinet.dll (Все метки)
|
|
| 11.10.2009, 19:26 | |
|
Ответы с готовыми решениями:
130
Создание архива Программное создание архива. Создание архива с паролем |
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 09.11.2024, 04:33 | |
|
Очень интересная тема, жаль, что никто так и не ответил за 15 лет... Сейчас в интернете можно легко найти только код на Дельфи, на VB не видел
Добавлено через 4 часа 38 минут Там, скорее всего, все API-функции к cabinet.dll такие как FCICreate имеют соглашение CDecl поэтому в стандартных VB-кодах просто так этого никто не смог бы написать раньше конечно.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 09.11.2024, 16:44 | |
|
Самое интересное что 10 функций обратного вызова тоже все CDecl...
Добавлено через 2 минуты Не удивительно конечно что никто так и не дал ответа. Это очень сложный код.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||||||||||||
| 10.11.2024, 22:08 | ||||||||||||
|
Добавлено через 4 часа 25 минут Я тут случайно узнал о недокументированной в MSDN функции ExtractFiles это функции ExtractFilesA и ExtractFilesW которые занимаются распаковкой CAB-файлов. Эта функция ExtractFiles является как раз красивой оболочкой для работы с распаковкой обращаясь к cabinet.dll. Есть ещё способ распаковки через SetupIterateCabinet из setupapi.dll который тоже в свою очередь обращается к cabinet.dll, но с функцией SetupIterateCabinet ещё попыхтеть надо тоже, там тоже коллбаки и много чего нужно написать. А вот недокументированную функцию ExtractFiles из advpack.dll, входящий в стандартную поставку Windows, я рассматриваю как оптимальный вариант. Это и есть та самая красивая обёртка которую нужно было написать обращаясь к cabinet.dll. Добавлено через 13 минут Фантастика! Всего одна строка кода!!! А создавать сложный модуль обращаясь к cabinet.dll можно целую неделю и там придётся написать 500 строк кода... А тут всё так просто!
Почему эту функцию не документировали в MSDN если она такая идеальная, я просто понять не могу... Добавлено через 9 минут Или вот например извлечь все файлы из архива (тогда оставляем vbNullString):
1
|
||||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 11.11.2024, 01:24 | |||||||||||
Сообщение было отмечено testuser2 как решение
Решение
Написал сегодня небольшой проектик для чтения и распаковки файлов из CAB-архивов, программным кодом на VB6.
Модуль:
0
|
|||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 11.11.2024, 01:33 | |
|
Фактически функцию SetupIterateCabinet я использую только для получения списка файлов внутри архива. Да и сам модуль нужен только для этого. А так, на самом деле, распаковка CAB-архивов идёт одной строчкой кода из формы, с помощью функции ExtractFiles из библиотеки advpack.dll.
Добавлено через 5 минут То что я написал - это самый лёгкий и самый упрощённый вариант для данной темы. Файлы CAB, конечно, можно распаковывать и с помощью функции SetupIterateCabinet , но честно сказать это не лучший вариант, так как можно заколебаться всё это описывать, много строк кода пришлось бы написать. Но есть класс CabFile.cls, который лежит у меня как раз в тестовом архиве CabFile.cab, так вот этот класс он действительно может распаковывать файлы из CAB только лишь кодом функции SetupIterateCabinet , однако там написано очень много строк кода, очень много дополнительных пользовательских функций, больше чем 800 строк кода там... А оно нам надо? И тем более, я тестировал этот класс - он глючный, некоторые архивы неправильно распаковывает. А тут у меня получается всё просто и красиво, и строк кода мало и всё работает правильно. В конечном итоге всё равно все эти функции, конечно, вызывают cabinet.dll однако нам не надо теперь париться с разбирательством с этим кодом для cabinet.dll, так как там очень сложный код.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 15.11.2024, 20:25 | |
|
Кстати я написал упаковку CAB, две недели писал, уйма ошибок было у меня так как это очень-очень сложный код оказался, но мне просто было интересно смогу я это написать или нет. Спортивный интерес так сказать.
2
|
|
|
sleep
4914 / 4553 / 837
Регистрация: 13.04.2015
Сообщений: 9,677
|
||
| 15.11.2024, 20:55 | ||
Потратить две недели своей жизни на какую-то хрень, которая за 15 лет никому не понадобилась, и скорее всего и не понадобится больше, для меня непостижимо.![]() Но тебе конечно плюс за такое дело.
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
||
| 15.11.2024, 21:07 | ||
|
Добавлено через 40 секунд Плюс на других форумах видел, много кто пытался написать этот код и не у кого не получалось. А у меня получилось.
1
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 16.11.2024, 14:28 | |
|
testuser2, там есть ошибки у меня, одну ошибку до сих пор не знаю как исправить
тебе нужен глючный код? Добавлено через 2 минуты я так и не смог устранить одну ошибку, сейчас у меня работает через "заплатку" но надо думать как исправить эту ошибку без заплатки пока не получается Добавлено через 25 минут testuser2, ты бы только знал, насколько сложный это код вообще, мало того что там 4 API-функции к cabinet.dll и 13 пользовательских call-back функций обратного вызова, так ещё и самые большие сложности это с описанием самих этих функций, особенно самые большие сложности с пониманием где ставить ByVal а где ByRef это самое сложное вообще, поставишь только вместо ByVal например ByRef или наоборот вместо ByRef поставишь ByVal и сразу идёт вылет из среды VB6 с необратимым исключением. Вообще у меня VB6 вылетал, в процессе написания этого кода, больше ста раз наверное... Одно необратимое исключение я не мог исправить целый день не понимал почему вылетает. Помог TwinBasic кстати он подсказывает где на какой строке кода примерно происходит необратимое исключение... Добавлено через 3 минуты Несколько раз я даже про себя сдавался и думал что это написать невозможно и думал про себя всё больше не буду заниматься этой ерундой Добавлено через 3 минуты Но русские не сдаются, как всем известно и я продолжал идти дальше... Меня путал даже Фафалон со своими неправильными советами где ставить ByVal а где ByRef
0
|
|
| 16.11.2024, 15:01 | ||
|
Добавлено через 13 минут Я, кстати, как раз хочу сделать парсер С-деклараций, чтобы их перегонят в VB-декларации. Я кое что кстати, уже сделал, но не уерен, на сколько правильно работает.
0
|
||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 16.11.2024, 15:44 | |
|
testuser2, сейчас пока выкладывать сырой код смысла нет, вряд ли мне кто-то поможет исправить ошибку так как это долго вникать надо, и нужно много знаний
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 18.11.2024, 23:54 | |
|
testuser2, основной код, который я переписывал с Delphi там он основан на временных файлах, в результате создавалась куча разных TMP-файлов, а мне это не нравится конечно же, зачем создавать много TMP-файлов в системной папке на диске, по моему это пережитки прошлого, а-ля Windows 98, сейчас у людей оперативки хватает можно спокойно выполнять все основные процессы в оперативной памяти компьютера, не создавая при этом огромную кучу TMP-файлов. Поэтому я сейчас переписываю этот код на технологию стримов, чтобы ни одна тээмпэшка на диске больше никогда не создавалась. Не люблю TMP. Но технология такая достаточно хакерская, я тебе скажу, чтобы вместо файлов TMP у нас были стримы в памяти для работы основной по созданию CAB.
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 20.11.2024, 20:44 | |
|
Здесь так же стоит отметить, что моя технология, основанная на работе в оперативной памяти, без временных файлов на диске, работает по скорости быстрее, чем стандартная технология основанная на временных файлах. Я создал два проекта.
1. Упаковка CAB с использованием временного файла 2. Упаковка CAB без временных файлов, все операции только в оперативке Сравнил по скоростям два эти проекта, и второй проект, без временных файлов оказался конечно же быстрее! В среднем быстрее на 100млск относительна обработки 100Кб данных
0
|
|
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|||||||||||
| 20.11.2024, 23:19 | |||||||||||
|
Представляю вашему вниманию первую версию модуля упаковки CAB-архивов. Я написал этот модуль полностью на VB6, поэтому пока будет работать только в VB6. Это первая версия модуля, который работает без ошибок уже теперь точно.
Пока функция CabinetAddFile принимает в качестве параметра только FileName одного файла, который нужно упаковать, а так же на выходе получается файл CAB. Это самая первая версия, потом можно будет придумать как заглатывать сразу списки файлов. Все вычислительные процессы производит и работает полностью в оперативке, без временных файлов, что очень важно для убыстрения работы скрипта. Пока только сжимает в MSZIP. Ещё не разобрался как установить другой метод сжатия. Самое главное это то, что я осуществил мечту! Написал код, который многие люди думали, что невозможно написать на VB6. Однако конечно будет зависимость в виде надстройки CDeclFix от The Trick для установки патча для работы CDecl функций. Как и где скачать эту надстройку надеюсь найдёте на этом форуме. Модуль:
1
|
|||||||||||
|
Испарился
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
|
|
| 20.11.2024, 23:55 | |
|
А вы знаете, я только что проверил, в TwinBasic тоже работает оказывается. Так что Ура! Даже переписывать не надо и что-то менять специально для TwinBasic. Просто надо импортировать проект из vbp и сохранить обязательно проект в той же папке и всё.
Добавлено через 3 минуты Но скорость абсолютно одинаковая, я проверил, что в VB6, что в TwinBasic для этого процесса упаковки файлов. Наверное потому что сам основной процесс упаковки выполняет cabinet.dll и от языка программирования тут уже скорость почти не зависит. Добавлено через 1 минуту 20 мегабайт упаковывает за 670 млск. Это хорошая скорость кстати.
0
|
|
| 21.11.2024, 01:50 | ||||
|
0
|
||||
| 21.11.2024, 01:50 | |
|
Помогаю со студенческими работами здесь
20
Создание установочного архива для своих любимых программ Распаковка архива rar без сохранения файла во временную папку Создание архива с паролем средствами PB. Возможно? Создание cab архива
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|