- Offizieller Beitrag
Hi,
hiermit könnt ihr ZIP-Archive mit dem in Windows integrierten ZIP erstellen:
Parameter $iIndexBase=1 ==> Falls das übergebene Array an Pos 0 einen Zähler führt ist BaseIndex=1 (Standard).
_FileListToArray kann man leider nicht für das Array verwenden, da diese Funktion nicht den Pfad ausliest.
Edit:
NEU - nun auch Entpacken.
Edit2:
Fixed - Fehler Variablenname. Beim Zusammenführen der beiden Funktionen hatte ich vergessen die Variablennamen anzugleichen. Und keiner hats gemerkt
Edit3:
Fixed - Relative Dateinamen. Der Pfad zur Zip-Datei kann jetzt relativ angegeben werden. Danke Oscar für den Hinweis.
_BuildInZIP
;===============================================================================
; Function Name: _BuildInZIP($sPath, $s_a_ToZip, $fUnZip=True, $iIndexBase=1, $fOverwrite=True)
; Description: Erstellt aus einer Datei od. einem Array von Dateien eine ZIP-Datei
; mit Hilfe der Windows eigenen ZIP-Funktion
; Parameter(s): $sPath Pfad der zu erstellenden ZIP-Datei // Bestehenden ZIP-Datei
; $s_a_ToZip String der Einzeldatei oder Array der zu zippenden Dateien
; // Pfad des Zielordners, in den entpackt werden soll
; $fUnZip=True Entpacken=True, Packen=False (Standard)
; $iIndexBase Index Basis (erstes Element mit Pfad) des übergebenen Arrays (0 od.1)
; $fOverwrite Falls $sPath existiert ==> Überschreiben (Standard=True)
; Return Value(s): Erfolg 1
; Fehler set @error 1 - Überschreiben aus, aber Zieldatei existiert
; 2 - Zieldatei endet nicht auf ".zip"
; 3 - zu komprimierende Datei existiert nicht
; @extended: Anzahl der fehlenden Dateien
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _BuildInZIP($sPath, $s_a_ToZip, $fUnZip=False, $iIndexBase=1, $fOverwrite=True)
Local $fh, $sNul = '', $sZIPHeader, $objShell = ObjCreate("Shell.Application"), $objZipOrdner, $err = 0
$sPath = FileGetLongName($sPath, 1)
If $fUnZip Then
Local $temp, $objZip
If Not FileExists($s_a_ToZip) Then DirCreate($s_a_ToZip)
$temp = $objShell.Namespace($s_a_ToZip)
$objZip = $objShell.Namespace($sPath)
$temp.CopyHere($objZip.Items)
Return 1
EndIf
If (Not $fOverwrite) And FileExists($sPath) Then Return SetError(1,0,0)
If StringRight($sPath, 4) <> '.zip' Then Return SetError(2,0,0)
For $i = 1 To 18
$sNul &= Chr(0)
Next
$sZIPHeader = Chr(80) & Chr(75) & Chr(5) & Chr(6) & $sNul
$fh = FileOpen($sPath, 10)
FileWrite($fh, $sZIPHeader)
FileClose($fh)
$objZipOrdner = $objShell.Namespace($sPath)
If Not IsArray($s_a_ToZip) Then
If Not FileExists($s_a_ToZip) Then Return SetError(3,1,0)
$objZipOrdner.CopyHere($s_a_ToZip)
Sleep(1000)
Return 1
EndIf
For $i = $iIndexBase To UBound($s_a_ToZip) -1
If Not FileExists($s_a_ToZip[$i]) Then
$err += 1
ContinueLoop
EndIf
$objZipOrdner.CopyHere($s_a_ToZip[$i])
Sleep(1000)
Next
If $err Then Return SetError(3,$err,0)
Return 1
EndFunc ;==>_BuildInZIP