Jak rozpakować plik ZIP?

przez | 2024-11-09

Poprzedni wpis zawierał informację, jak skompresować pliki do archiwum ZIP to teraz dwa słowa o dekompresji.

Tutaj znów moglibyśmy skorzystać z jakiegoś zewnętrznego programu, ale już wcześniej pisałem o wadach tego rozwiązania.

Oto prosta funkcja rozpakowująca całe archiwum do wskazanego folderu:

' Inspiracja:
' https://www.rondebruin.nl/win/s7/win002.htm

Public Function UnZip(ByVal ZIPname, ByVal ExtractFolder) As Boolean
    On Error GoTo UnZip_Error
    
    Dim oApp As Object
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(ExtractFolder).CopyHere oApp.Namespace(ZIPname).Items
    UnZip = True
    
UnZip_Error2:
    Set oApp = Nothing
    Exit Function

UnZip_Error:
    MsgBox Err.Description, vbExclamation, "UnZip"
    Resume UnZip_Error2
End Function

Z kolei jeśli chciałbyś rozpakować tylko jeden plik z archiwum to możesz użyć tej oto funkcji:

Public Function UnZipOneFile(ByVal ZIPname, ByVal ExtractFolder, ByVal FileToExtract) As Boolean
    On Error GoTo UnZipOneFile_Error
    
    Dim oApp As Object
    Set oApp = CreateObject("Shell.Application")
    oApp.Namespace(ExtractFolder).CopyHere oApp.Namespace(ZIPname).Items.Item(FileToExtract)
    UnZipOneFile = True
    
UnZipOneFile_Error2:
    Set oApp = Nothing
    Exit Function

UnZipOneFile_Error:
    MsgBox Err.Description, vbExclamation, "UnZip"
    Resume UnZipOneFile_Error2
End Function

Przykład wywołania funkcji:

Sub TestUnZip()
    Dim Ret As Boolean
    
    Ret = UnZip("v:\pliki.zip", "v:\pliki\")
    'Ret = UnZipOneFile("v:\pliki.zip", "v:\pliki\", "readme.txt")
    
    If Ret = True Then
        MsgBox "Rozpakowano", vbInformation
    Else
        MsgBox "Wystapił błąd", vbExclamation
    End If
End Sub

Uwaga: funkcja nie posiada za bardzo obsługi błędów. Warto jest wcześniej sprawdzić, czy np. plik zip istnieje, czy folder do którego chcemy rozpakować pliki istnieje a także np. czy mamy prawa do zapisu do tego folderu itp.

Wskazówka: jeśli rozpakowujemy pliki do folderu w którym są już jakieś inne pliki, pojawi się standardowy windowsowy komunikat, co zrobić z plikami o takich samych nazwach.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.