Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Архивация файлов в zip / 12 сообщений из 12, страница 1 из 1
03.03.2009, 17:49
    #35849109
Krasnaja Shapka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов в zip
объясните, пожалуйста, в чем прикол.
такая программка работает, архивирует определенные файлы в 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
04.03.2009, 01:22
    #35849618
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов в zip
Это происходит потому, что требуется передача 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
04.03.2009, 10:57
    #35850171
Krasnaja Shapka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов в zip
спасибо. все заработало.
...
Рейтинг: 0 / 0
04.03.2009, 15:55
    #35851201
Архивация файлов в zip
а как извлечь конкретный файл из конкретного zip?
то есть только один
...
Рейтинг: 0 / 0
05.03.2009, 03:13
    #35852143
ZVI
ZVI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов в zip
интересуюсьа как извлечь конкретный файл из конкретного 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
06.03.2009, 08:38
    #35854926
Архивация файлов в zip
наверное что-то не так с параметрами, потому что получается такая строка
Код: plaintext
1.
    .CopyHere Zip & "\" & File
    .CopyHere "C:\Tmp\Archive.zip\Книга1.xls"
не могли бы Вы ещё раз посмотреть
Спасибо.
...
Рейтинг: 0 / 0
06.03.2009, 10:28
    #35855146
Krasnaja Shapka
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Архивация файлов в zip
винда работает с зипом как с папкой... соответственно "C:\Tmp\Archive.zip\Книга1.xls" это ссылка на файл в архиве...

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


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