_Zip_Count()
#Include <_Zip.au3>
#include <_Zip.au3>
$Zip = _Zip_Create(@ScriptDir & "\1.zip", 1)
$Zip=_Zip_AddItem(@ScriptDir & "\1.zip", @ScriptDir & "\Тест.txt")
#include <_Zip.au3>
$Zip = _Zip_DeleteItem(@ScriptDir & "\1.zip", @ScriptDir & "\Тест.txt")
#include <_Zip.au3>
$Zip=_Zip_ItemExists(@ScriptDir & "\1.zip", @ScriptDir & "\Тест.txt")
#include <_Zip.au3>
$Zip = _Zip_Unzip(@ScriptDir & "\1.zip", "Тест.txt", @ScriptDir & "\Temp")
#include
, что не столь очевидно. Обычно стандартные файлы для #include
встроены в пакет. Возможно, сигналом для этого являлось то, что имя файла начинается с подчёркивания? Хотелось бы, чтобы такие сигналы где-то явно описывались на видном месте, а не добывались за счёт опыта.Этот же скрипт просто неправильно написан. Надо вот так.А вот этот не работает.
Код:#include <_Zip.au3> $Zip = _Zip_DeleteItem(@ScriptDir & "\1.zip", @ScriptDir & "\Тест.txt")
#include <_Zip.au3>
$Zip = _Zip_DeleteItem(@ScriptDir & "\1.zip", "Тест.txt")
Все равно не работает. Выдает ошибку 7 - Failed to delete itemНадо вот так.В справке это объясняется не очень удачно, надо догадываться, что имеется в виду.Код:#include <_Zip.au3> $Zip = _Zip_DeleteItem(@ScriptDir & "\1.zip", "Тест.txt")
#include <_Zip.au3>
$iZip = _Zip_DeleteItem(_Encoding_ANSIToOEM(@ScriptDir & "\1.zip"), _Encoding_ANSIToOEM("Тест.txt"))
$iErr = @error
MsgBox(4096, "", $iZip & ", " & $iErr)
Func _Encoding_ANSIToOEM($sText)
$sBuffer = DllStructCreate("char[" & StringLen($sText) + 1 & "]")
$aRet = DllCall("User32.dll", "int", "CharToOem", "str", $sText, "ptr", DllStructGetPtr($sBuffer))
If Not IsArray($aRet) Then
Return SetError(1, 0, '')
ElseIf $aRet[0] = 0 Then
Return SetError(2, $aRet[0], '')
Else
Return DllStructGetData($sBuffer, 1)
EndIf
EndFunc
Func _Zip_DeleteItem($sZipFile, $sFileName)
If Not _Zip_DllChk() Then Return SetError(@error, 0, 0)
If Not _IsFullPath($sZipFile) Then Return SetError(3, 0, 0)
; parse filename
Local $sPath = ""
$sFileName = _Zip_PathStripSlash($sFileName)
If StringInStr($sFileName, "\") Then
; subdirectory, parse out path and filename
$sPath = _Zip_PathPathOnly($sFileName)
$sFileName = _Zip_PathNameOnly($sFileName)
EndIf
Local $oNS = _Zip_GetNameSpace($sZipFile, $sPath)
If Not IsObj($oNS) Then Return SetError(4, 0, 0)
Local $oFolderItem = $oNS.ParseName($sFileName)
If Not IsObj($oFolderItem) Then Return SetError(5, 0, 0)
Local $oVerbs = $oFolderItem.Verbs()
If Not IsObj($oVerbs) Then Return SetError(6, 0, 0)
For $oVerb In $oVerbs
If StringReplace($oVerb.Name, "&", "") = "delete" Then; вот в этой строке
$oVerb.DoIt()
If IsObj($oNS.ParseName($sFileName)) Then
Return SetError(8, 0, 0)
Else
Return 1
EndIf
EndIf
Next
Return SetError(7, 0, 0)
EndFunc ;==>_Zip_DeleteItem
StringReplace($oVerb.Name, "&", "") = "Удалить"
Откуда такая информация?А он русскоязычный
Пользователь выбирает локальный язык. Соответственно, вся система работает на этом языке. Так сделали авторы системы.Откуда такая информация?
проблема не в русскоязычном пути
Если бы у автора темы была англоязычная система, то вопросов не было бы
Так вот же он конкретный случай: у меня удаляется файл с английским именем, а с русским не удаляется. Локализация английская, поэтому доводы насчёт "удалить" вместо "delete" непонятны.Решаю попавшуюся проблему для конкретного случая.
создавайте тему , будем обсуждать. для того и форум.Вопрос, кстати, непраздный: у меня как раз за пару дней до появления топиков об архивах был план заняться автоматизацией работы с архивами.
автор решил свою проблему.Другую тему создаём, когда вопрос другой, а здесь то же самое. Тема не раскрыта.