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

Можно ли на VB создать самораспаковываюшийся архив?

06.08.2016, 09:00. Показов 4116. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос задан в заголовке. Меня интересует. Если
можно, то как? А если нет, то что можно?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
06.08.2016, 09:00
Ответы с готовыми решениями:

Как можно обойти проверку CRC или как можно распаковать поврежденный архив?
Есть старый архив. Но при попытке достать из него файл выдается сообщение о несовпадении CRC. Как можно обойти проверку CRC или как вообще...

Создать архив 7z
добрий день! прошу помочь подправить макрос которий должен архивировать папку work_mmdd которая лежит в D:\Temp в архив с именем...

Создать архив zip
Подскажите почему в архив попадают только последние файлы а не все МассивФайлов = НайтиФайлы(Файл, "*.txt"); Для каждого...

26
 Аватар для UBUNTU
352 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,344
06.08.2016, 10:04
Лучший ответ Сообщение было отмечено echs как решение

Решение

1. Установите архиватор WinRar.
2. Прочитать и понять следующие команды:

RAR <command> [ -<switches> ] <archive> [ <@listfiles…> ]
[ <files…> ] [ <path_to_extract\> ]

Пример:
«C:\Program Files\WinRAR\Rar.exe» a -to3d -s -m5 -x*.rar -df -dh — archive.rar *.log

Еще раз повторюсь, это не мануал, который не помешает покурить, благо он коротенький, а просто шпаргалка.
Сперва разумеется указывается путь к rar. В общем случае это «C:\Program Files\WinRAR\Rar.exe» (с кавычками). Однако есть возможность использования не консольной, а gui-версии. Для этого нужно прописать «C:\Program Files\WinRAR\WinRar.exe».
Команды/command

Первый параметр коммандной строки — команда.

a — добавление в архив
m — перемещение в архив
e/x — извлечение файлов из архива
f — обновление архива (только те что уже есть в архиве)
i — поиск строки
l — список содержимого архива
s — создание sfx архива
t — тест архива
u — обновление файлов в архиве (с добавлением новых)
Ключи/switches

На втором месте — всевозможные ключи (опции), разделенные одним или несколькими пробелами. Для удобства и исключения некоторых ошибок «колбасу» ключей можно завершать двойным дефисом (—)
Самые важные ключи

-r — рекурсивный проход каталогов
-s — непрерывный (solid) архив. Очень полезная опция для большого количества однотипных и/или небольших файлов. В непрерывшом архиве словарь для всех файлов будет общим.
-m<n> — метод (уровень) сжатия. 0 — без сжатия, 3 — обычный, 5 — максимальный
-dh — открывать файлы, открытые в данный момент другими процессами (open shared files)
Ключи безопасности

-dw — удаляя, перезаписывать (wipe) файлы
-dr — удалять файлы в корзину (windows)
-ht[b|c] — тип хэша [BLAKE2,CRC32]. Для rar 5 рекомендуется использовать BLAKE2 как более криптостойкий.
-p[пароль] — шифровать данные
-hp[пароль] — шифровать и данные и заголовки (имена файлов)
-rr — добавлять информацию для восстановления. Актуально при невосстановимых ошибках чтения/записи носителя информации.
-t — тест после архивирования перед удалением (например для команды m)
Ключи для оптимизации

-ma — выбор версии RAR. ma4 выбирает 4-ю версию, ma и ma5 — пятую. По умолчанию архивы создаются в 4й версии. Пора использовать уже пятую.
-mt<потоки> — количество потоков. По умолчанию RAR выберет количество потоков по количеству ядер. Если процесс архивирования предполагается фоновым, лучше занять только одно ядро, указав ключ -mt1
-md<n>[k,m,g] — размер словаря Для RAR 5.0 размер словаря может быть таким 128 KB, 256 KB, 512 KB, 1 MB, 2 MB, 4 MB, 8 MB, 16 MB, 32 MB, 64 MB, 128 MB, 256 MB, 512 MB, 1 GB. Памяти потребуется в 6 раз больше чем размер словаря. Значения по умолчанию или 32М (и 4Мб для RAR 4) будет вполне достаточно.
-v<размер>[k|b|f|m|M|g|G] — разбивка архива на тома определенного размера. Большие файлы могут вызвать проблемы при их передаче/пересылке/хранении. -v2G — размер тома 2Gb.
-ri<приоритет>[:<задержка>] — приоритет процесса и задержка после каждой операции чтения-записи. (только в windows). Приоритет: 0 — по умолчанию системы, 1 — минимальный, 15 — максимальный. Задержка: 0..1000 ms. Задание задержки после каждой файловой операции позволяет сделать процесс архивирования менее заметным для других процессов системы.
-ms — типы файлов, которые следует добавлять в архив, но не сжимать (-ms*.rar;*.zip;*.jpg)
Выбор файлов

-to<время> — добавляет файлы старше указанного возраста. Формат: [<ndays>d][<nhours>h][<nminutes>m][<nseconds>s]. Например -to3d
-tn<время> — добавляет файлы новее указанного возраста
-x*.rar — не включать в архив файлы или папки по маске файла/пути. *\filename — не включать файл filename во всех каталогах
-x@<имяфайла> — исключить файлы, указанные файле <имяфайла>
-n — дополнительный фильтр по маске файла/пути
Разные ключи

-ilog[name] — запись лога в файл
-log[fmt][=name] — запись списка обработанных файлов в лог-файл
-ap установить путь внутри архива
-ver[n] хранение в архиве предыдущих версий файла
-df — удалить файлы после архивирования
-ed — не добавлять пустые каталоги
-ep — добавлять файлы в архив без каталогов
-ep1..ep3 — опции сохранения пути внутри архива (1 — без родительского каталога, 2 — полный путь, 3 — с диском/windows)
-ag[формат] — добавить к имени архива текущую дату и время
Символы в формате: Y — год, M — месяц, MMM — месяц (Jan, Feb, etc.), W — номер недели, A — день недели (пн — 1, вс — 7), D — день месяца, E — день года, H — час, M — минута (если указано после «H»), I — минута, S — секунда, N — порядковый номер, добавляемый к архиву так, чтобы оно было уникальным.
— Прекратить обнаружение опций

За дополнительными "Почему" и "А как", обратится к мануалу вложенному в архиватор.

На случай если, у вас будут вопросы "И что мне теперь постоянно устанавливать на все компьютеры WinRAR?". Даю ответ, достаточно иметь в папке с программой 2 файла "Rar.EXE" и "Unrar.exe".
4
Регистрация: 23.10.2013
Сообщений: 5,076
Записей в блоге: 8
06.08.2016, 10:10  [ТС]
UBUNTU
Спасибо! Я очень Вам благодарен!
0
 Аватар для UBUNTU
352 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,344
06.08.2016, 10:28
Лучший ответ Сообщение было отмечено echs как решение

Решение

geh, Сделайте .bat файл, в нем команды и из программы его на выполнение делайте, что-то типа Shell App.Path & "\start.bat" а батник уже сам к "Rar.EXE" и "Unrar.exe" обратится которые так же должены быть в этой папке. Ну вы поняли надеюсь.
1
Эксперт по электронике
6527 / 3156 / 333
Регистрация: 28.10.2011
Сообщений: 12,385
Записей в блоге: 7
06.08.2016, 11:43
Наверное ТС хочет написать программу "самораспаковывающийся архив" а не создать его WinRARом как предлагают выше.

Не по теме:

Не знаю как на VB (на нем не создавал) но на другом диалекте бейсика можно. http://pure-basic.narod.ru/art... x_zip.html

2
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
06.08.2016, 13:43
Лучший ответ Сообщение было отмечено echs как решение

Решение

http://www.vbforums.com/showth... DropTarget - создание ZIP архива.
http://www.vbforums.com/showth... rage-based - распаковка ZIP архива.
Все работает без доп зависимостей.
5
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
06.08.2016, 13:51
WinRar - рулит
между прочим я не раз выкладывал решения с использованием WinRar'а
например здесь:
https://www.cyberforum.ru/post9287586.html
в переменной модуля зашифрованна картинка, которая программно распаковывается WinRar'ом
хотя также можно распаковывать консольным Rar.EXE" и "Unrar.exe
0
 Аватар для Sasha_Smirnov
5562 / 1370 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
06.08.2016, 18:36
Цитата Сообщение от geh Посмотреть сообщение
самораспаковываюшийся

geh, где-то на 5-м слоге (ещё не зная, чья тема), я начал удивляться*… ан нет, зря!
________________
* «Тэк-с… на киберфорум проник человек, безошибочно набравший слово „самораспаковывающийся”».
1
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
06.08.2016, 19:31
На основе встроенной утилиты makecab.
3
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
06.08.2016, 23:26
Лучший ответ Сообщение было отмечено magirus как решение

Решение

Zip-архиватор встроен во все современные ОСи такчто можно смело его использовать
и WinRar тоже присутствует у всех, должно быть странным если у когото его нет
но если даже его не окажется то вот вариант который работает

Вариант с ZIP. Здесь и только сдесь на этом форуме а не гдето там далеко (в америке) и не понятно как этим пользоваться ...

Ниже выкладываю программу которая всё это делает, тоесть запаковывает и распаковывает архив:
я даже не стану архив с пректом сюда заливать (извиняюсь за каламбур). программа очень проста для понимания
и не нуждается в дополнительных файлах, настройках, батниках и тому подобным костыликам
жаль что geh поторопился и раздал все свои лучшие ответы

а лучшим должно стать это ))
Итак: берём пустую форму и бросаем в её модуль сей код..
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
73
74
75
76
77
78
79
80
81
82
Option Explicit
'
'Архиватор-деархиватор ZIP
'by the fever brain 2016
'
Const r = 90
Dim WithEvents cb1 As CommandButton, WithEvents cb2 As CommandButton
Dim zn$, pn$, dd$
 
Private Sub cb1_Click()
    'Создание архива для указанного пути
    zn = InputBox("Имя архива", , Full("Archive.zip")): If LCase(Right$(zn, 4)) <> ".zip" Then Exit Sub
    pn = InputBox("Путь к файлу(папке)", , Full("test.txt")): If pn = "" Then Exit Sub
    CreateZIP(zn).CopyHere (Full(pn))
End Sub
 
Private Sub cb2_Click()
    'Извлечение из архива содержимого в одноименную папку
    zn = InputBox("Имя архива", , Full("Archive.zip")): If LCase(Right$(zn, 4)) <> ".zip" Then Exit Sub
    dd = InputBox("Папка извлечения", , Full(Replace$(zn, ".zip", "", , , 1))): If dd = "" Then Exit Sub
    On Error Resume Next: MkDir dd: On Error GoTo 0
    ShApp.NameSpace(Full(dd)).CopyHere ShApp.NameSpace(Full(zn)).Items
End Sub
 
Private Sub Form_Load()
    Dim w&
    w = r
    ChDir App.Path
    With Fso.CreateTextFile("test.txt")
        'Создаём тэстовый файл и напишем туда чтонибудь
        .Write "Привет народ ! Да здравствует WinRar !"
    End With
 
    'Добавляем кнопочек
    Set cb1 = Controls.Add("vb.CommandButton", "cb1"): With cb1
        .Move w, r, 2500: w = w + .Width + r
        .Caption = "Добавить в архив zip"
        .Visible = 1
    End With
 
    Set cb2 = Controls.Add("vb.CommandButton", "cb2"): With cb2
        .Move w, r
        .Caption = "извлеч в ..."
        .Visible = 1
    End With
End Sub
 
Private Function Full$(ByVal Path$) 'полный путь
    Full = Fso.GetAbsolutePathName(Path)
End Function
 
Private Function Fso()
    Static obj As Object
    If obj Is Nothing Then Set obj = CreateObject("scripting.filesystemobject")
    Set Fso = obj
End Function
 
Private Function ShApp()
    Static obj As Object
    If obj Is Nothing Then Set obj = CreateObject("Shell.Application")
    Set ShApp = obj
End Function
 
Private Function CreateZIP(ByVal ZipName$) As Object
    With Fso
        If LCase(Right$(ZipName, 3)) <> "zip" Then Exit Function
        If .FileExists(ZipName) Then Kill ZipName
        .CreateTextFile(ZipName, 1).Write "PK" & Chr(5) & Chr(6) & String(18, 0)
        Set CreateZIP = ShApp.NameSpace(Full(ZipName))
    End With
End Function
 
 
Private Sub Form_Unload(Cancel As Integer)
    If MsgBox("Убрать созданные файлы и папки этой программой ?", 68) = vbNo Then Exit Sub
    With Fso
        On Error Resume Next
        Fso.DeleteFile "test.txt", 1
        Fso.DeleteFolder "Archive", 1
        Fso.DeleteFile "Archive.zip", 0
    End With
End Sub
Добавлено через 4 минуты
PS
Делал на семёрке, в портабельной VB6. Проблем с совместимостью возникнуть не должно.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
07.08.2016, 00:51
Цитата Сообщение от fever brain Посмотреть сообщение
и WinRar тоже присутствует у всех
Представь себе, некоторые не пользуются WinRAR в пользу 7zip, BandiZip и мн. других. И таких людей не мало.
Цитата Сообщение от fever brain Посмотреть сообщение
Ниже выкладываю программу которая всё это делает
И какое она имеет отношение к самораспаковывающемуся архиву? Такой архив должен уметь сам себя распаковывать, а не сторонняя программа.
Цитата Сообщение от fever brain Посмотреть сообщение
Проблем с совместимостью возникнуть не должно.
Угу. До тех пор, пока не захочется упаковать пустой каталог, скрытый файл или обеспечить синхронное выполнение программы.
Большинство этих проблем было решено в примере. Только здесь нет отношения к задаче ТС.
1
Эксперт по электронике
6527 / 3156 / 333
Регистрация: 28.10.2011
Сообщений: 12,385
Записей в блоге: 7
07.08.2016, 10:38
Цитата Сообщение от fever brain Посмотреть сообщение
Zip-архиватор встроен во все современные ОСи такчто можно смело его использовать
Тема не про архивацию/распаковку стороннего файла-архива, а про самораспаковывающийся архив. geh, не уточнил, но наверное ему нужно создать свою программу, распаковывающую архив дописанный в конец исполняемого файла, а не в виде отдельного файла-архива.
0
oh my god
 Аватар для fever brain
1456 / 796 / 161
Регистрация: 05.01.2016
Сообщений: 2,307
Записей в блоге: 8
07.08.2016, 14:51
Цитата Сообщение от locm Посмотреть сообщение
свою программу, распаковывающую архив дописанный в конец исполняемого файла
Ну а в чём проблема то ?
Делаем программу которая умеет распаковывать ZIP, и которая умеет пришивать байтовый массив в конец
исполняемого файла, там нужно только старт считывания уточнить и скомпелировать
Я ведь выложил свою версию для того чтобы увидеть как это можно сделать

Тоже самое и делает WinRar он свой SFX модуль пришивает к заархивированному массиву данных
и останется только запустить его для распаковки, ничего больше не потребуется

Добавлено через 11 минут
UBUNTU писал,
Цитата Сообщение от UBUNTU Посмотреть сообщение
s — создание sfx архива
и я писал как работать с WinRar из своего приложения
.. Call CreateObject("WScript.Shell").Run("WinRA R x -y """ & f & "", 1, True)
0
 Аватар для UBUNTU
352 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,344
07.08.2016, 15:59
locm, а что мешает иметь в своей программе функции winrar? его можно всегда держать рядом или в самом exe своей программы)))) зачем такие ухищрения или господа думают, что напишут архиватор лучше чем winrar?
0
Эксперт по электронике
6527 / 3156 / 333
Регистрация: 28.10.2011
Сообщений: 12,385
Записей в блоге: 7
07.08.2016, 16:10
Цитата Сообщение от UBUNTU Посмотреть сообщение
а что мешает иметь в своей программе функции winrar? его можно всегда держать рядом или в самом exe своей программы))))
Его лицензионное соглашение такое допускает?
Представьте, есть многогиговый SFX архив и если его распаковывать вашим методом, то придется извлечь из EXE на диск WinRAR и архив и после этого распаковывать. Быдлокодерство, не?
0
 Аватар для UBUNTU
352 / 213 / 42
Регистрация: 04.02.2015
Сообщений: 1,344
07.08.2016, 19:07
locm, Быдлокордество это немного другое. Предлагаю посмотреть вот тут: http://govnokod.ru/. Но а по сути это лучше чем изобретать велосипед и причем такой хиленький.
0
Модератор
10048 / 3894 / 883
Регистрация: 22.02.2013
Сообщений: 5,847
Записей в блоге: 79
07.08.2016, 19:23
Ничего не нужно изобретать, выше я дал две ссылки на пример упаковщика и распаковщика нативными средствами винды. Запаковываем с помощью упаковщика и кладем в хвост распаковщика zip архив. Все точно также будет распаковываться через WinRar:
Миниатюры
Можно ли на VB создать самораспаковываюшийся архив?  
1
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
22.11.2024, 19:57
Здесь в этой теме никто не сказал, что для того чтобы создать SFX-архив достаточно просто сам файл архива поместить в ресурсы под любым именем и всё! После этого останется только в своей программе реализовать распаковку. Самый простой способ это CAB, так как там распаковка будет всего одной строчкой кода. Я сделал сегодня сам такой пример: Работа с zip архивами
0
Эксперт по электронике
6527 / 3156 / 333
Регистрация: 28.10.2011
Сообщений: 12,385
Записей в блоге: 7
22.11.2024, 21:02
Цитата Сообщение от HackerVlad Посмотреть сообщение
для того чтобы создать SFX-архив достаточно просто сам файл архива поместить в ресурсы под любым именем и всё!
Попробуйте создать таким образом самораспаковывающийся архив на 10+ ГБ и посмотрите что получится.
К тому же этот метод несовместим с другими архиваторами.
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
22.11.2024, 21:17
Цитата Сообщение от locm Посмотреть сообщение
с другими архиваторами
Что такое другие архиваторы? Я говорю про свою программу, про свой exe.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.11.2024, 21:17
Помогаю со студенческими работами здесь

Создать архив файла
Здравствуйте, у меня в папке лежит 1 документ .csv. Нужно его положить в архив, притом архив должен лежать в той же папке, что и...

Как создать архив?
На хостинге есть папка с файлами которая мне нужна на компе. Как мне её оттуда &quot;достать&quot;? Я полагаю что надо как-то её...

Создать zip архив
При нажатии на кнопку собирается csv файл и выдается пользователю на скачивание. Как сделать, чтоб этот файл выдавался заархивированным?...

Как создать архив?
Подскажите, пожалуйста, 1) Как добавить в архив файл *.Xml путь к которому прописан в Edit1.text с помощью архиватора, путь к которому...

Создать архив с паролем
Добрый вечер, я пишу архиватор, и хочу сделать так чтобы на него можно было устанавливать пароль, а именно : написать пароль в textBox, и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 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. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru