powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Архивация файлов в zip
12 сообщений из 12, страница 1 из 1
Архивация файлов в zip
    #35849109
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
объясните, пожалуйста, в чем прикол.
такая программка работает, архивирует определенные файлы в zip архив
Код: plaintext
1.
2.
3.
4.
5.
Sub NewZip(sPath)
    If Len(Dir(sPath)) >  0  Then Kill sPath
    Open sPath For Output As # 1 
    Print # 1 , Chr$( 80 ) & Chr$( 75 ) & Chr$( 5 ) & Chr$( 6 ) & String( 18 ,  0 )
    Close # 1 
End Sub
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Sub Zip_Doc()
 Dim ZipApp As Object
 Const FileNameDoc1 As String = "P:\Reports\2009\02\calendar 26.02.2009.xls"
 Const FileNameDoc2 As String = "P:\Reports\2009\02\Daily letter.doc"
 Const FileNameZip As String = "P:\Reports\2009\02\9999.zip" 'ИМЯ АРХИВА

' Dim FileNameZip As String
' FileNameZip = "P:\Reports\2009\02\9999.zip"
 
 On Error Resume Next
    
    NewZip (FileNameZip)
    Set ZipApp = CreateObject("Shell.Application")
    ZipApp.Namespace(FileNameZip).CopyHere FileNameDoc1
    ZipApp.Namespace(FileNameZip).CopyHere FileNameDoc2
    
    Do Until ZipApp.Namespace(FileNameZip).Items.Count =  2 
        Application.Wait (Now + TimeValue("0:00:01"))
    Loop
    
    Set ZipApp = Nothing
End Sub

если задаю имя архива как переменную FileNameZip, а не как константу - не работает, создается пустой архив и цикл Do не прекращается (без обработчика ошибок - ошибка Object variable not set при копировании файла в архив)

Код: plaintext
1.
2.
3.
4.
5.
....
' Const FileNameZip As String = "P:\Reports\2009\02\9999.zip"

 Dim FileNameZip As String 'ИМЯ АРХИВА
    FileNameZip = "P:\Reports\2009\02\9999.zip"
 ....
вообще-то изначально необходимо передавать имя файлов и архива из другой процедуры, но не работает уже на этом этапе!

спасибо.
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35849618
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это происходит потому, что требуется передача ByVal FileNameZip, а не ByRef FileNameZip.

Решение простое:

1-й вариант:
Заменить везде ZipApp.Namespace(FileNameZip)
на ZipApp.Namespace(FileNameZip & "")

2-й вариант:
Заменить везде ZipApp.Namespace(FileNameZip)
на ZipApp.Namespace((FileNameZip))

Во 2-м варианте используется тот факт, что парсер компилятора всегда ожидает некое выражение внутри скобок и автоматически создает новую run-time переменную, что равносильно ByVal.

И еще, чтобы не ждать лишнее время вместо Application.Wait можно использовать DoEvents:
Код: plaintext
1.
2.
3.
Do Until ZipApp.Namespace((FileNameZip)).Items.Count =  2 
  DoEvents
Loop
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35850171
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо. все заработало.
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35851201
а как извлечь конкретный файл из конкретного zip?
то есть только один
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35852143
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
интересуюсьа как извлечь конкретный файл из конкретного zip?
то есть только один
Файл извлекается так же, подменяя фолдер архивом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub ExtractFileFromZipToFolder(Zip$, File$, Folder$)
  With CreateObject("Shell.Application").Namespace((Folder))
    .CopyHere Zip & "\" & File
  End With
End Sub

Sub Test()
  ExtractFileFromZipToFolder "C:\Tmp\Archive.zip", "Книга1.xls", "C:\Tmp"
End Sub
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35854926
наверное что-то не так с параметрами, потому что получается такая строка
Код: plaintext
1.
    .CopyHere Zip & "\" & File
    .CopyHere "C:\Tmp\Archive.zip\Книга1.xls"
не могли бы Вы ещё раз посмотреть
Спасибо.
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35855146
Krasnaja Shapka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
винда работает с зипом как с папкой... соответственно "C:\Tmp\Archive.zip\Книга1.xls" это ссылка на файл в архиве...

другой вопрос как разархивировать файл НЕ зная имя заархивированного файла, а зная только имя архива
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35855329
Фотография klen_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разархивация zip-файла, (не как папку)
Код: plaintext
1.
2.
Private Sub Command3_Click()
    ExtractFileFromZip "C:\АРХИВЫ\docs.zip", "help.doc", "C:\Мои документы"
End Sub
Код: plaintext
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.
Sub ExtractFileFromZip(ByVal FileZip As String, ByVal FileDoc As String, ByVal DesPath As String)
On Error GoTo err1

    Dim ShellClass As Shell32.Shell                 'Microsoft Shell Controls and Automation
    Dim FileSource As Shell32.Folder
    Dim FileDestin As Shell32.Folder
    Dim FolderItem As Shell32.Folderitems
    Dim f
    Set ShellClass = New Shell32.Shell
    Set FileSource = ShellClass.NameSpace(FileZip)  ' "C:\АРХИВЫ\docs.zip"
    Set FileDestin = ShellClass.NameSpace(DesPath)  ' "C:\Мои документы"
    Set FolderItem = FileSource.Items
    
    If FileDoc = "" Then
        FileDestin.CopyHere FolderItem,  0            ' разархивировать весь архив
    Else
        For Each f In FolderItem
            If UCase(f) = UCase(FileDoc) Then       ' только указанный файл
                FileDestin.CopyHere f,  0 
                Exit For
            End If
        Next
    End If
            
    Set ShellClass = Nothing
err1:
    If Err.Number <>  0  Then
        MsgBox Err.Description, vbExclamation, "Error"
    End If
End Sub
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35857428
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Krasnaja Shapka...
другой вопрос как разархивировать файл НЕ зная имя заархивированного файла, а зная только имя архива
Разархивировать все файлы можно еще и так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Sub ExtractFromZipToFolder(Zip$, Folder$)
  With CreateObject("Shell.Application")
    .Namespace((Folder)).CopyHere .Namespace((Zip)).Items
  End With
End Sub

Sub Test1()
  ExtractAllFilesFromZipToFolder "C:\Tmp\Archive.zip", "C:\Tmp"
End Sub
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #35857429
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неточность в имени вызываемой процедуры, должно быть:
Код: plaintext
1.
2.
3.
Sub Test1()
  ExtractFromZipToFolder "C:\Tmp\Archive.zip", "C:\Tmp"
End Sub
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Архивация файлов в zip
    #38491972
imort
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется, оригинал есть здесь http://hiprog.com/index.php?option=com_content&task=view&id=251661619&Itemid=35
...
Рейтинг: 0 / 0
Архивация файлов в zip
    #38493104
ZVI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imort, посмотрите на дату по ссылке в заголовке статьи, там 20.03.2009 г., а здесь с 3.03.2009 по 8.03.2009 ;)
Но публикаций по данной теме было много и раньше, в том числе и на этом форуме
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Архивация файлов в zip
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]