С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/41: Рейтинг темы: голосов - 41, средняя оценка - 4.80
Вопрощающий

Создание (+распаковка) CAB архива

11.10.2009, 19:26. Показов 10794. Ответов 130

Студворк — интернет-сервис помощи студентам
Обращаясь к cabinet.dll, без использования *.exe
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.10.2009, 19:26
Ответы с готовыми решениями:

Создание архива
Есть такая строка .AddAttachment "C:\logfiles.rar" При выполнении кода на ней ошибка. Как создать программно этот архив?

Программное создание архива.
Добрый день! Можноли программно сделать архив, например, ZIP или rar, не важно и добавить в него файлы? Заранее спасибо.

Создание архива с паролем
Private Declare Sub Sleep Lib "kernel32" (ByVal milliseconds As Long) Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal...

130
1384 / 838 / 91
Регистрация: 08.02.2017
Сообщений: 3,517
Записей в блоге: 1
24.11.2024, 19:03
Студворк — интернет-сервис помощи студентам
Я его считаю итальянцем ) догадайся кого
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.11.2024, 19:06
Джон Джонсон или кто?
0
1384 / 838 / 91
Регистрация: 08.02.2017
Сообщений: 3,517
Записей в блоге: 1
24.11.2024, 19:09
Фафалоне это очень подходит для итальянской фамилии, также как Сталоне
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.11.2024, 19:12
Jon Johnson это fafalone, но он живёт в США

Добавлено через 13 секунд
А не в Италии

Добавлено через 1 минуту
Его зовут Jon Johnson это написано у него на гитхабе, если ты не видел, то можешь сам там посмотреть. И он живёт в США. fafalone это вымышленный ник просто, не имеет никакого отношения к какой-либо фамилии, а тем более к Сталонне
0
1384 / 838 / 91
Регистрация: 08.02.2017
Сообщений: 3,517
Записей в блоге: 1
24.11.2024, 19:12
Но чувак, который продвигает Твинбейсик в твиттере, он по виду итальянец
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.11.2024, 19:15
Есть ещё интернет-магазин fafalone.com где продают какую-то одежду, но это никак не относится к самому fafalone.

Добавлено через 2 минуты
Цитата Сообщение от testuser2 Посмотреть сообщение
продвигает Твинбейсик в твиттере
скинь ссылку что там за чувак
0
1384 / 838 / 91
Регистрация: 08.02.2017
Сообщений: 3,517
Записей в блоге: 1
24.11.2024, 19:26
Я с телефона не могу счас скинуть, нету прокси
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.11.2024, 19:31
testuser2, слушай чудеса продолжаются! fafalone протестировал программу эту в EXE в Windows XP и там оказывается работает у него мой модуль версии 1.3
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.11.2024, 19:32
Он прислал скрин успешной работы программы в его Windows XP
Миниатюры
Создание (+распаковка) CAB архива  
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.11.2024, 19:33
А ведь у меня тоже есть Windows XP! Как же я не догадался сразу протетисровать там! Сейчас посмотрю, очень интересно стало, неужели не работает только в 7 и 8. А в XP и 10 работает...
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
24.11.2024, 19:48
testuser2, слушай, у тебя же Windows 8, да? и у тебя не работает...

Я сейчас сам запустил свой Windows XP и у меня тоже работает в Windows XP как и у fafalone. Короче работает только в XP и в Windows 10... Бред конечно какой-то... А в Windows 7, 8 не работает короче... Надеюсь в будущем разработчики Твина исправят этот баг...
Миниатюры
Создание (+распаковка) CAB архива  
0
1384 / 838 / 91
Регистрация: 08.02.2017
Сообщений: 3,517
Записей в блоге: 1
25.11.2024, 07:08
HackerVlad, мож в режиме совместимости с XP надо запускать?

Добавлено через 2 часа 26 минут
Цитата Сообщение от HackerVlad Посмотреть сообщение
Короче работает только в XP и в Windows 10...
Есть такое на 10ке действительно работает сейчас проверил

Добавлено через 42 секунды
Режим совместимости не помогает.
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
12.12.2024, 23:00
Мы очень долго ломали голову почему не работаёт в семёрке, но сегодня Wayne Phillips написал мне, что это его ошибка, которую он уже исправил, но чтобы работало прямо сейчас то достаточно просто поменять декларации с "cabinet.dll" на просто "cabinet" без приписки ".dll" тогда сразу начинает работать, я уже проверил, это действительно работает)

Добавлено через 31 секунду
Так что теперь будет работать и в TwinBasic
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
05.01.2025, 01:28
Радует то, что эту ошибку в TwinBasic'е уже исправили! Теперь не обязательно удалять приписку ".dll" в декларациях, если скачать и пользоваться самой новой версией ТвинБейсика! Это действительно хорошая новость, что они работают, стараются молодцы и довольно быстро исправляют ошибки.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
09.01.2025, 02:18
Технологию упаковки и распаковки обращаясь к cabinet.dll можно использовать, ни только для упаковки/распаковки файлов на диске, но и для упаковки и распаковки буферов (байтовых массивов) прямо в памяти, что немаловажно. Упаковка буферов таким образом будет гораздо лучше и эффективнее чем упаковка буферов с помощью функции RtlCompressBuffer. И даже эффективнее и лучше чем упаковка с помощью дельт.

Добавлено через 2 минуты
Вообще CAB - это очень хороший формат, очень хорошо сжимает данные, я посмотрел, на уровне RAR и на уровне 7Zip примерно... Меня расстраивает то, что форумы не хотят воспринимать этот формат архива как возможный формат файлов для вложений в публикациях. Ни этот форум, ни заграничный... Странные люди конечно, чем вас CAB не угодил, вообще не пойму...

Добавлено через 1 час 36 минут
Я создал универсальную функцию CabinetAddFiles, которая теперь работает на входе и на выходе как с файлами на диске, так и с байтовыми массивами или потоками IStream!

Функция принимает в качестве параметра CabinetDestination (выходные/результатирующие данные) следующие возможные варианты:

1. Строка: полное имя файла будущего CAB-архива
2. Байтовый массив
3. Поток IStream, передавая дескриптор Long (для 32 бит) или LongPtr (для 64 бит)
4. Поток IStream, передавая объект IUnknown

Параметр SourceFullFileNamesOrBuffer (входные/исходные/исходящие данные) принимает следующие возможные варианты:

1. Строка - если файл один (это полный FileName)
2. Массив строк, если это список файлов с полными именами файлов для пакетной обработки
3. Массив байт!!! Если исходные данные это вовсе не файл на диске, а байтовый массив
4. Поток ISream, передавая дескриптор Long (для 32 бит) или LongPtr (для 64 бит)
5. Поток IStream, передавая объект IUnknown

Необязательный параметр DestFileNames принимает следующие возможные варианты:

1. Строка - если это один файл (это полный путь и имя файла внутри CAB-архива)
2. Массив строк - если это список файлов (это полные пути и имена файлов, которые будут отображаться внутри архива CAB)

И при всём при этом универсальном чуде - полная поддержка 64 бит

Добавлено через 5 минут
Кстати я заметил что в 64-битном исполнении упаковка работает немного быстрее, чем в 32 бит... Радует что TwinBasic создал такое чудо конечно для поддержки 64 бит. Полная совместимость у меня короче VB6 (32 бита) и TwinBasic (64 бит)
0
1384 / 838 / 91
Регистрация: 08.02.2017
Сообщений: 3,517
Записей в блоге: 1
09.01.2025, 02:31
Я, кстати, придумал технологию, которая более компактно перобразует байты в строку чем Base64 называется Base222 )
Кликните здесь для просмотра всего текста
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
    
    Private Sub TestStringEncodeToBase222()
        cbBaseXEncode = AddressOf BaseXEncode_Init
        
        Dim s As String = "Какая-то очень длинная строка"
        Dim s1 As String = ToAnsi(s)
        Dim s2 As String = StringToBase222(s1)
        Dim b() As Byte = s1
        Dim s3 As String = BytesToBase64(b)
        
        Debug.Print s ; vbCr ; s2 ; vbCr ; s3
        Debug.Print LenB(s) ; LenB(s2) ; LenB(s3)
    End Sub 
    
    Private Function StringToBase222(sInp As String) As String
        Dim strSz&, llBuf^(), i& ', llbufSz&
        Dim sOut$
        strSz = LenB(sInp)
        i = (strSz - 1) \ 8
        ReDim llBuf(i) 'Lenb(Of LongLong)
        vbaCopyBytes strSz, VarPtr(llBuf(0)), StrPtr(sInp)
        For i = 0 To i
            sOut = sOut & "," & cbBaseXEncode(llBuf(i), 222)
        Next
        
        Return sOut
    End Function
    
    Private Function BytesToBase64(varBytes() As Byte) As String
        With CreateObject("MSXML2.DomDocument").createElement("b64")
            .DataType = "bin.base64"
            .nodeTypedValue = varBytes
            BytesToBase64 = Replace(.text, vbLf, "")
        End With
    End Function
    
    Function BaseXEncode_Init(ByVal llNum As LongLong, ByVal Base As Long) As String
        Static Init As Boolean
        If Init Then
        Else
            Dim i&
            Dim sChrRng As String = _
            "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/=!""#$%&'()*,-.:;<>?@[\]^_`{|}~ ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—˜™љ›њќћџЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя"
            CopyMemory ChrTbl(0), ByVal StrPtr(sChrRng), MaxBase * 2
            Init = True
        End If
        cbBaseXEncode = AddressOf BaseXEncode
        Return BaseXEncode(llNum, Base)
    End Function
    Function BaseXEncode(ByVal llNum As LongLong, ByVal Base As Long) As String
        Const MaxIndex = 65
        Select Case Base
        Case 0 To MaxBase
        Case Else: Exit Function
        End Select
        Dim iAr%(MaxIndex), i As Long = MaxIndex, strLen&
        Dim blMinus As Boolean
        If llNum < 0 Then llNum = -llNum: blMinus = True
        Do
            iAr(i) = ChrTbl(CLng(llNum Mod Base))
            i -= 1
            llNum = llNum \ Base
        Loop While llNum
        If blMinus Then iAr(i) = 45: i -= 1
        strLen = MaxIndex - i
        
        BaseXEncode = String$(strLen, vbNullChar)
        vbaCopyBytes(strLen * 2, StrPtr(BaseXEncode), VarPtr(iAr(i + 1)))
    End Function    
    Private Function ToAnsi$(Str$)
        ToAnsi = StrConv(Str, vbFromUnicode)
    End Function


Добавлено через 4 минуты
Результат (длина исходной строки, base222, base64)
Code
1
2
3
4
Какая-то очень длинная строка
,-kr№[ѓ©ЧK,-,ЎKUµIЯg,-e'є†‘Oчђ,1САірМ
yuDq4P8t8u4g7vfl7fwg5Ovo7e3g/yDx8vDu6uA=
 58  74  80
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
09.01.2025, 02:33
Вот новая версия модуля для упаковки CAB-архивов, версия 1.5. Которую я написал сегодня, модернизировав старый вариант.

P. S. Я бы с удовольствием выложил CAB-архив, вместо 7-ZIP но форум мне не позволяет этого Печалька, а ведь CAB - это самый распространённый формат архивов поддерживаемый во всех системах Microsoft начиная с Windows 95! А форум не хочет поддерживать(((
Миниатюры
Создание (+распаковка) CAB архива  
Вложения
Тип файла: 7z Упаковка CAB-архивов 1.5.7z (5.44 Мб, 6 просмотров)
1
1384 / 838 / 91
Регистрация: 08.02.2017
Сообщений: 3,517
Записей в блоге: 1
09.01.2025, 02:38
Цитата Сообщение от HackerVlad Посмотреть сообщение
P. S. Я бы с удовольствием выложил CAB-архив
Ты можешь просто к .cab добавить расширение .zip, добавив пояснение, что это cab )
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
09.01.2025, 02:48
testuser2, но на самом деле 7z оказался всё-таки лучше, для этого вложения 7z занимает 5.7 Мб, а CAB занимает 6.9 Мб, но за подсказку как выложить CAB спасибо, сейчас попробуем кстати, я переименовал файл "Упаковка CAB-архивов 1.5.cab" в "Упаковка CAB-архивов 1.5.cab.zip" это просто переименовка, на самом деле это не zip конечно же.
При этом проводник Windows этот файл не открывает, пока его не переименуешь обратно в CAB а вот Total Commander открывает спокойно!
Вложения
Тип файла: zip Упаковка CAB-архивов 1.5.cab.zip (6.54 Мб, 7 просмотров)
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
09.01.2025, 02:51
Цитата Сообщение от testuser2 Посмотреть сообщение
называется Base222
Сам придумал?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.01.2025, 02:51
Помогаю со студенческими работами здесь

Создание установочного архива для своих любимых программ
Многие новички в программировании рано или поздно создают программы или игры, которыми хотят поделиться с другими пользователями или своими...

Распаковка архива rar без сохранения файла во временную папку
В архиве rar хранится сжатый (с паролем) файл txt, как его распаковать (пароль известен) чтобы файл не записывался на диск, а содержимому...

Создание архива с паролем средствами PB. Возможно?
Есть ли какая то библиотека что позволяет запихнуть PB кодом файлы в архив с паролем? Ну и соответственно извлекать из архива. Спасибо.

Создание cab архива
Здравствуйте! Помогите реализовать код создания cab архива с помощью CabinetAPI Код из msdn не получается скомпилировать, не понимаю...

Создание папки с датой в имени и распаковка в неё архива
Есть папка на диске С:\Arhiv в нем есть архивы по датам! надо что бы брал самый последний архив по дате и распаковывал в корень С:\Arhiv\...


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

Или воспользуйтесь поиском по форуму:
120
Ответ Создать тему
Новые блоги и статьи
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Old Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru