#include-once
Func _ZipCreate($sZip, $iFlag = 0)
If FileExists($sZip) Then
If Not $iFlag Then
If MsgBox(32 + 4, "Zip Functions UDF", "Click YES to overwrite existing archive file: " & @CRLF & _
@TAB & $sZip) <> 6 Then Return SetError(1, 0, 0)
EndIf
EndIf
Local $sHeader = Chr(80) & Chr(75) & Chr(5) & Chr(6)
For $i = 1 To 18
$sHeader &= Chr(0)
Next
$hFile = FileOpen($sZip, 16 + 8 + 2)
If $hFile <> - 1 Then
If FileWrite($hFile, $sHeader) Then
FileClose($hFile)
Return 1
Else
Return SetError(3, 0, 0)
EndIf
Else
Return SetError(2, 0, 0)
EndIf
EndFunc
Func _ZipAdd($sZip, $sSrc)
If Not FileExists($sZip) Then
If Not _ZipCreate($sZip) Then Return SetError(1, @error, 0)
EndIf
If FileExists($sSrc) Then
Local $oShell = ObjCreate('Shell.Application')
If Not @error And IsObj($oShell) Then
Local $oFolder = $oShell.NameSpace ($sZip)
If Not @error And IsObj($oFolder) Then
If StringInStr(FileGetAttrib($sSrc), "D") Then
$oFolder.CopyHere ($oShell.NameSpace ($sSrc).items)
Else
$oFolder.CopyHere ($sSrc)
EndIf
Sleep(1000)
If @error Then
Return SetError(5, 0, 0)
Else
Return 1
EndIf
Else
Return SetError(4, 0, 0)
EndIf
Else
Return SetError(3, 0, 0)
EndIf
Else
Return SetError(2, 0, 0)
EndIf
EndFunc
Func _ZipList($sZip)
Local $aNames[1] =[0], $i
If FileExists($sZip) Then
Local $oShell = ObjCreate('Shell.Application')
If Not @error And IsObj($oShell) Then
Local $oFolder = $oShell.NameSpace ($sZip)
If Not @error And IsObj($oFolder) Then
Local $oItems = $oFolder.Items ()
If Not @error And IsObj($oItems) Then
For $i In $oItems
$aNames[0] += 1
ReDim $aNames[$aNames[0] + 1]
$aNames[$aNames[0]] = $oFolder.GetDetailsOf ($i, 0)
Next
Else
SetError(4)
EndIf
Else
SetError(3)
EndIf
Else
SetError(2)
EndIf
Else
SetError(1)
EndIf
Return $aNames
EndFunc
Func _UnZip($sZip, $sDest)
If FileExists($sZip) Then
If Not FileExists($sDest & "\") Then
If Not DirCreate($sDest) Then Return SetError(2, 0, 0)
EndIf
Local $oShell = ObjCreate('Shell.Application')
If Not @error And IsObj($oShell) Then
Local $oFolder = $oShell.NameSpace ($sZip)
If Not @error And IsObj($oFolder) Then
Local $oItems = $oFolder.Items ()
If Not @error And IsObj($oItems) Then
$oDest = $oShell.NameSpace ($sDest & "\")
If Not @error And IsObj($oDest) Then
$oDest.CopyHere ($oItems)
Sleep(500)
If @error = 0 Then
Return 1
Else
Return SetError(7, 0, 0)
EndIf
Else
Return SetError(6, 0, 0)
EndIf
Else
Return SetError(5, 0, 0)
EndIf
Else
Return SetError(4, 0, 0)
EndIf
Else
Return SetError(3, 0, 0)
EndIf
Else
Return SetError(1, 0, 0)
EndIf
EndFunc