;=============================================================================== ; 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 (bugfix@autoit.de) ;=============================================================================== 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