Что нового

Zip UDF - Библиотека для работы с zip-архивами встроенными средствами Windows

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
AutoIt: 3.1.127+
Версия: 1.01

Категория: Разное

Описание: Эта небольшая библиотека позволяет работать с zip-архивами используя встроенные средства Windows. Поддерживается определение установленных архиваторов WinRar (rar.exe) и 7zip (7z.exe), если найдены, то функции используют именно эти архиваторы (приоритет стоит на 7zip).
По умолчанию определение внешних архиваторов включено, для отключения достаточно задать значение False переменной $UseExternalZipApp ($UseExternalZipApp = False).

Примечание: Функция _ZipList возвращает список только с архивов созданных встроенными средствами Windows.

Пример:
Код:
#include <File.au3>
#include <Array.au3>
#include <Zip_UDF.au3>
;

; Parameters for test
$LogFile = @ScriptDir & "\ZipTestLog.log"
$SrcFile = @ScriptFullPath
$SrcFolder = @ScriptDir & "\ZipTestSrc"
$ZipFile = @ScriptDir & "\ZipTest.zip"
$DestFolder = @ScriptDir & "\ZipTestDest"

$UseExternalZipApp = True

; Run the test
_FileWriteLog($LogFile, "Starting test.............")

; Create zip file
$RetCode = _ZipCreate($ZipFile)
_FileWriteLog($LogFile, "Return code from _ZipCreate($ZipFile) = " & $RetCode & " and @Error = " & @error)

; Add a single file
$RetCode = _ZipAdd($ZipFile, $SrcFile)
_FileWriteLog($LogFile, "Return code from _ZipAdd($ZipFile, $SrcFile) = " & $RetCode & " and @Error = " & @error)

; Add a folder
$RetCode = _ZipAdd($ZipFile, $SrcFolder)
_FileWriteLog($LogFile, "Return code from _ZipAdd($ZipFile, $SrcFolder) = " & $RetCode & " and @Error = " & @error)

; List the contents of the zip file
$aList = _ZipList($ZipFile)
_FileWriteLog($LogFile, "List returned from _ZipList($ZipFile) with @Error = " & @error)
_ArrayDisplay($aList, "Results for: _ZipList($ZipFile)")

; Unzip to a new location
$RetCode = _UnZip($ZipFile, $DestFolder)
_FileWriteLog($LogFile, "Return code from _UnZip($ZipFile, $DestFolder) = " & $RetCode & " and @Error = " & @error)

Источник: http://www.autoitscript.com/forum/index.php?showtopic=27900&view=findpost&p=198583
Автор(ы): PsaltyDS, CreatoR (мод.)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
эм.. а где сам UDF? или надо с оффа качать?
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
А сейчас? :whistle:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626

gregaz

AutoIT Гуру
Сообщения
1,166
Репутация
299
Есть пара вопросов :

1 . Как можно занести файл в архив без создания в архиве структуры папок ? .Только использованием : FileChangeDir ?
Пытался использовать кавычки , но не получилось. ($SrcFile='"' & @ScriptDir & '\Folder1\index.htm"' )
2 . Можно ли просмотреть содержимое файла , находящегося в архиве , не распаковывая его ?
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
И у меня вопрос. Как заставить UDF при распаковывании автоматически производить замену файлов?
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Мне нужно чтоб в архиве была полная структура папок, а в архиве просто файлы. Как это можно исправить?
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
OffTopic:
SECTOR
как-то мутно ты выражаешься. чтоб в архиве было одно, а в архиве было другое ;D
 

SECTOR

Продвинутый
Сообщения
399
Репутация
59
Я имел в виду, что при использовании _ZipAdd в архив добавляются файлы БЕЗ структуры папок, а хочется чтоб [структура папок] сохранялась :smile:
 

asdf8

Скриптер
Сообщения
564
Репутация
152
Есть предложение, в UDF, при использовании winrar, добавить ключ "-ibck".
Пока не обновил winrar до 3.93 было все нормально,
с новым winrar стало выскакивать окно архиватора при пользовании UDF.
 

pvnn

Осваивающий
Сообщения
305
Репутация
32
Если
Код:
$UseExternalZipApp = False

то появляется системное окно Сжатие с прогресс баром (запускал под XP)


Как отключить это окно? В опции UDF этого нет

Код программы:

Код:
#include <Zip_UDF.au3>

$UseExternalZipApp = False
$Namezip=@ScriptDir&'\'&'test.zip'

_ZipCreate($Namezip,0)
_ZipAdd($Namezip, @ScriptDir&'\'&'test.txt')
 

saavaage

Знающий
Сообщения
171
Репутация
17
CreatoR, можно ли каким-нибудь образом задавать уровень сжатия, метод и поточность при при работе с данной функцией?
создавал архивы через _ZipAdd.
 
Автор
CreatoR

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
saavaage [?]
можно ли каким-нибудь образом задавать уровень сжатия, метод и поточность при при работе с данной функцией?
Не думаю.
Используй 7zip UDF (тут же на форуме есть).
 

gora

Знающий
Сообщения
315
Репутация
19
CreatoR
Посмотрел в библиотеке поиск архиватора 7-Zip по записи в реестре.
У меня ключ Path содержит путь с завершающим слешем, в результате чего путь к архиватору 7z.exe имеет задвоенный слеш.
Код:
$sExternal_7zip_Path = c:\Program Files\7-Zip\\7z.exe
Наличие завершающего слеша не является обязательным и зависит\зависило раньше от типа инсталлятора архиватора (exe или msi).
 

saavaage

Знающий
Сообщения
171
Репутация
17
Обнаружил не совсем корректную работу при установленном в системе winrar (только winrar). При попытке архивирования указанного каталога, создается архив, содержащий вложенные папки с названиями, равными названию папок пути.
т.е. при архивировании каталога Next? расположенного по пути F:\LABORATORY\WORK_6 (sborka collections)\111\Next, создается архив-матрешка Next, содержащий каталоги LABORATORY, WORK_6 (sborka collections), 111, Next (туче лежит в 111, 111 - в WORK_6 (sborka collections), WORK_6 (sborka collections) - в LABORATORY, LABORATORY - в Next). При установленном 7z такого не наблюдается.


Добавлено:
Сообщение автоматически объединено:

"Используй 7zip UDF (тут же на форуме есть)." - желательно, чтобы код работал и с winrar и с 7z и со встроенным архиватором. 7 zip UDF это умеет?
 

La2Angel

Новичок
Сообщения
156
Репутация
1
Так же при добавлении файлов размером 80Мб добавляет 1-2 мб в архив и завершает работу, если в конце поставить Msbox и когда оно выскочит, не закрывать его, дожимает нормально, но как нажмешь ок, так процесс прерывается. Т.е. скрипт функционирует не полное сжатие файла.


Добавлено:
Сообщение автоматически объединено:

Происходит этот баг, когда ставить так $UseExternalZipApp = False, Высвечивает стандартный диолог винды сжатием, если взять тот же пример, и убрать от туда дисплей арр, то скрипт просто завершает работу и архив не записывается до конца.
 

djasup

Новичок
Сообщения
64
Репутация
1
CreatoR а как можно проследить событие того, что архивация файла завершена,чтоб можно было следующий отправить и как копировать файлы с каталогом вместе, а то одноименые файлы заменяются :(?
 
Верх