Задача простая. Добавить файлик в существующий zip архив или создать новый. Есть известный способ это сделать: [vba]
Код
Sub CreateZip()
Dim iTmp As Integer, sTmp As String Dim oApp As Object Set oApp = CreateObject("Shell.Application")
'Путь к зипу sTmp = "D:\MyArch.zip"
'Получение числа файлов в архиве. 'При ошибке будет создан пустой архив On Error GoTo ErrorLable iTmp = oApp.Namespace(sTmp & "").Items.Count On Error GoTo 0
'Копируем файл в архив oApp.Namespace(sTmp & "").CopyHere "D:\MyFile.txt"
'ждём завершения упаковки файла Do DoEvents: DoEvents Application.Wait (Now + TimeValue("0:00:01")) Loop Until oApp.Namespace(sTmp & "").Items.Count = iTmp + 1
MsgBox "ОК"
Exit Sub
ErrorLable: If Err = 91 Then 'При ошибке будет создан пустой архив Open sTmp For Binary Access Write As #1 Put #1, 1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String$(18, 0) Close #1 Resume End If
End Sub
[/vba]
Вопрос: А можно ли обойтись без .Namespace? В идеале вообще хотелось бы не использовать файловую систему. Создать зип как объект, нааддить туда своих файлов, а затем сохранить его. Может кто нибудь нашел способ? Например какую-нибудь dll'ку. Поделитесь пожалуйста.
Задача простая. Добавить файлик в существующий zip архив или создать новый. Есть известный способ это сделать: [vba]
Код
Sub CreateZip()
Dim iTmp As Integer, sTmp As String Dim oApp As Object Set oApp = CreateObject("Shell.Application")
'Путь к зипу sTmp = "D:\MyArch.zip"
'Получение числа файлов в архиве. 'При ошибке будет создан пустой архив On Error GoTo ErrorLable iTmp = oApp.Namespace(sTmp & "").Items.Count On Error GoTo 0
'Копируем файл в архив oApp.Namespace(sTmp & "").CopyHere "D:\MyFile.txt"
'ждём завершения упаковки файла Do DoEvents: DoEvents Application.Wait (Now + TimeValue("0:00:01")) Loop Until oApp.Namespace(sTmp & "").Items.Count = iTmp + 1
MsgBox "ОК"
Exit Sub
ErrorLable: If Err = 91 Then 'При ошибке будет создан пустой архив Open sTmp For Binary Access Write As #1 Put #1, 1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String$(18, 0) Close #1 Resume End If
End Sub
[/vba]
Вопрос: А можно ли обойтись без .Namespace? В идеале вообще хотелось бы не использовать файловую систему. Создать зип как объект, нааддить туда своих файлов, а затем сохранить его. Может кто нибудь нашел способ? Например какую-нибудь dll'ку. Поделитесь пожалуйста.Bagir
со времени создания темы, открыл для себя DotNetZip и использовал для создания zip архивов, передавая туда как файлы на диске, так и значения строковых переменных. http://dotnetzip.codeplex.com/downloads/get/258015 Вот примерчик создания файла: [vba]
Код
Public Sub ZIPArchiv()
Dim ZipApp As Object Set ZipApp = CreateObject("Ionic.Zip.ZipFile")
With ZipApp '.Encryption = 3 '.Password = "123"
.AddEntry "Readme.txt", "Содержание файла Readme.txt передано строкой"
.Name = "D:\MyArch.zip" .Comment = "Archive comment. Only English letters." .Save .Dispose End With
End Sub
[/vba]
А вот сейчас понадобилось открыть уже созданный архив для внесения изменений. Кто дружит с DotNetZip подскажите плиз, чтобы кучу инфы не перебирать, или ссыль путевую по этой теме.
Нашел тут кое что: .Initialize Работает, но хотелось бы узнать все возможности. Подкиньте ссыль почитать
со времени создания темы, открыл для себя DotNetZip и использовал для создания zip архивов, передавая туда как файлы на диске, так и значения строковых переменных. http://dotnetzip.codeplex.com/downloads/get/258015 Вот примерчик создания файла: [vba]
Код
Public Sub ZIPArchiv()
Dim ZipApp As Object Set ZipApp = CreateObject("Ionic.Zip.ZipFile")
With ZipApp '.Encryption = 3 '.Password = "123"
.AddEntry "Readme.txt", "Содержание файла Readme.txt передано строкой"
.Name = "D:\MyArch.zip" .Comment = "Archive comment. Only English letters." .Save .Dispose End With
End Sub
[/vba]
А вот сейчас понадобилось открыть уже созданный архив для внесения изменений. Кто дружит с DotNetZip подскажите плиз, чтобы кучу инфы не перебирать, или ссыль путевую по этой теме.
Нашел тут кое что: .Initialize Работает, но хотелось бы узнать все возможности. Подкиньте ссыль почитатьBagir
Сообщение отредактировал Bagir - Вторник, 26.03.2013, 18:47