Можно ли на VB создать самораспаковываюшийся архив?
Формулировка задачи:
Вопрос задан в заголовке. Меня интересует. Если
можно, то как? А если нет, то что можно?
Решение задачи: «Можно ли на VB создать самораспаковываюшийся архив?»
textual
Листинг программы
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д