Как известно, Windows имеет встроенную функциональность по работе с zip-архивами. Если в системе не стоит WinZip, WinRar или что подобное; Проводник отображает zip-архивы как сжатые папки.
Можно ли использовать эту функциональность для создания zip - архивов?
На
офф. форуме есть пример такого скрипта, но чего-то у меня не работает. Пустой zip-архив создает, а файлы в него не добавляет. Может, из-за того, что у меня в системе WinRar стоит?
пример неработающего скрипта
Код: _ZipCreate(@ScriptDir & "\test.zip")
_ZipAdd(@ScriptDir & "\exit64.ico", @ScriptFullPath)
Func _ZipCreate($sZip)
If not StringLen(Chr(0)) Then Return SetError(1)
Local $sHeader = Chr(80) & Chr(75) & Chr(5) & Chr(6), $hFile
For $i = 1 to 18
$sHeader &= Chr(0)
Next
$hFile = FileOpen($sZip, 2)
FileWrite($hFile, $sHeader)
FileClose($hFile)
EndFunc
Func _ZipAdd($sZip, $sFile)
If not StringLen(Chr(0)) Then Return SetError(1)
ConsoleWrite ("ok1" & @CRLF)
If not FileExists($sZip) or not FileExists($sFile) Then Return SetError(2)
ConsoleWrite ("ok2" & @CRLF)
Local $oShell = ObjCreate('Shell.Application')
ConsoleWrite ("ok3" & @CRLF)
If @error or not IsObj($oShell) Then Return SetError(3)
ConsoleWrite ("ok4" & @CRLF)
Local $oFolder = $oShell.NameSpace($sZip)
ConsoleWrite ("ok5" & @CRLF)
If @error or not IsObj($oFolder) Then Return SetError(4)
ConsoleWrite ("ok6" & @CRLF)
$oFolder.CopyHere($sFile)
ConsoleWrite ("ok7" & @CRLF)
Sleep(500)
ConsoleWrite ("ok8" & @CRLF)
EndFunc
Func _ZipList($sZip)
If not StringLen(Chr(0)) Then Return SetError(1)
If not FileExists($sZip) Then Return SetError(2)
Local $oShell = ObjCreate('Shell.Application')
If @error or not IsObj($oShell) Then Return SetError(3)
Local $oFolder = $oShell.NameSpace($sZip)
If @error or not IsObj($oFolder) Then Return SetError(4)
Local $oItems = $oFolder.Items()
If @error or not IsObj($oItems) Then Return SetError(5)
Local $i = 0
For $o in $oItems
$i += 1
Next
Local $aNames[$i + 1]
$aNames[0] = $i
$i = 0
For $o in $oItems
$i += 1
$aNames[$i] = $oFolder.GetDetailsOf($o, 0)
Next
Return $aNames
EndFunc