Перейти к содержанию

Работа с WebSoft.Zip.dll

Подключение

Работа с .Net библиотеками возможна только на сервере

Проверялось на следующих версиях WebSoft.Zip.dll

  • 1.22.6.8
  • 1.22.11.1

Создание класса для работы с библиотекой

oZip = tools.get_object_assembly("Zip")

Методы

  • GetVersion()
    Возвращает версию библиотеки.

  • GetError()
    Возвращает текст последней ошибки.

  • Save()
    Заглушка: метод возвращает 1, если архив открыт.

  • Close()
    Закрывает архив и освобождает ресурсы.

  • CharSet
    Свойство с геттером и сеттером. Кодировка для имён файлов.

  • CompressionLevel
    Свойство с геттером и сеттером. Уровень сжатия (0 — без сжатия, 1 — сжатие).

  • SetCompressionLevel(level)
    Устанавливает уровень сжатия (0 — без сжатия, 1 — сжатие).

  • CreateArchive(path)
    Создаёт новый ZIP-архив, удаляя старый при наличии.

  • OpenArchive(path, access)
    Открывает архив с доступом на чтение.

  • OpenOrCreate(path)
    Открывает существующий архив или создаёт новый.

  • AddFiles(path)
    Добавляет файлы по маске (*.ext) в корень архива.

  • AddFile(path)
    То же самое, что AddFiles().

  • AddFilesToPath(path, pathInArchive)
    Добавляет файлы с указанием папки в архиве.

  • AddDirectory(path)
    Добавляет все файлы и папки из указанной директории.

  • AddDirectoryToPath(path, pathInArchive)
    То же самое, но с указанием относительного пути в архиве.

  • Extract(outputPath)
    Извлекает всё содержимое архива в указанный каталог.

  • ExtractFiles(path, dirInArchive, outputPath)
    Извлекает файл из подкаталога архива.

  • ListFiles()
    Возвращает список всех файлов в архиве.

GetVersion

Возвращает текующую версию библиотеки

Код

oZip = tools.get_object_assembly("Zip")
var version = oZip.GetVersion()
alert(version)

Результат

getversion_1

GetError

Возвращает текст последней ошибки.

ВАЖНО

Эксперименты проводились в агенте, который запускался на стороне сервера. Если при первом запуске агента сгенерировать ошибку, потом запустить агент, где будет только вывод ошибки, GetError() будет содержать ошибку из первого запуска. Перезагрузка сервера ошибку не очищает.

Библиотека кешируется.

Для получения ошибки попытаемся открыть несуществующий архив

Код

oZip = tools.get_object_assembly("Zip")
// Архив other.zip не существует
oZip.OpenArchive(UrlToFilePath('x-local://trash/other.zip'))
alert(oZip.GetError())

Результат

geterror_0

Save

Используется в связке с Close() в коробочном коде. Но в dll он просто возвращает 1, если архив открыт.

Код

oZip = tools.get_object_assembly("Zip")

...
// Работа с архивом
...

oZip.Save()
oZip.Close()
oZip = null

Close

Закрывает архив

Код

oZip = tools.get_object_assembly("Zip")

...
// Работа с архивом
...

oZip.Save()
oZip.Close()
oZip = null

CharSet

Информация

Кодировка меняется глобально, так как после перезагрузки сервера значение сохраняется.

Библиотека кешируется.

Использование в качестве геттера возвращает текущую кодировку по умолчанию

Код

oZip = tools.get_object_assembly("Zip")
var charset = oZip.CharSet
alert(charset)

Результат

charset_getter_1

Использование в качестве сеттера - устанавливаем свою кодировку

Код

oZip = tools.get_object_assembly("Zip")
var charsetDefault = oZip.CharSet
alert("Кодировка по умолчанию: " + charsetDefault)

oZip.CharSet = "utf-8"
var charsetNew = oZip.CharSet
alert("Кодировка новая: " + charsetNew)

Результат

charset_setter_1

При работе с файлами и папками в названии которых используется кириллица, необходимо менять кодировку на utf-8, иначе названия файлов превращаются в иероглифы

Создадим архивы с кодировкой windows-1251 и кодировкой utf-8. Посмотрим что вышло в каждом случае

Структура данных

charset_structure

Код создания архивов

oZip = tools.get_object_assembly("Zip")
oZip.CharSet = "windows-1251" // "utf-8", "windows-1251"
oZip.OpenOrCreate(UrlToFilePath('x-local://trash/archiveWindows1251.zip'))
oZip.AddDirectory(UrlToFilePath('x-local://trash/test_structure'))
oZip.Save()
oZip.Close()
oZip = null

oZip = tools.get_object_assembly("Zip")
oZip.CharSet = "utf-8" // "utf-8", "windows-1251"
oZip.OpenOrCreate(UrlToFilePath('x-local://trash/archiveUtf8.zip'))
oZip.AddDirectory(UrlToFilePath('x-local://trash/test_structure'))
oZip.Save()
oZip.Close()
oZip = null

Результат

Распаковываем арихивы archiveWindows1251.zip и archiveUtf8.zip и смотрим кодировку

charset_unpack_win1251 charset_unpack_utf8

Информация

Все манипуляции распаковки производились стандартным распаковщиком Windows 11 и 7-zip.
При распаковке WinRar кодировка корректная

CompressionLevel

Информация

Уровень сжатия меняется глобально, так как после перезагрузки сервера значение сохраняется.

Библиотека кешируется.

Использование в качестве геттера возвращает текущий уровень сжатия

Код

oZip = tools.get_object_assembly("Zip")
var compressionLevel = oZip.CompressionLevel
alert("Сжатие по умолчанию: " + compressionLevel)

Результат

compressionlevel_getter_1

Использование в качестве сеттера - устанавливаем своё сжатие

Код

oZip = tools.get_object_assembly("Zip")
var compressionLevelDefault = oZip.CompressionLevel
alert("Сжатие по умолчанию: " + compressionLevelDefault)

oZip.CompressionLevel = 0
var compressionLevelNew = oZip.CompressionLevel
alert("Сжатие новое: " + compressionLevelNew)

Результат

compressionlevel_setter_1

Измерения уровней сжатия в качестве эксперимента от 0 до 10 показали, что есть только 2 уровня 0 или 1.

compresslevel_0_10

SetCompressionLevel

Устанавливает уровень сжатия. Делает то же самое что и геттер CompressionLevel, только тут это метод с параметром.

Возвращает 1 при успешной установке уровня сжатия и 0 - если что-то пошло не так

Код

oZip = tools.get_object_assembly("Zip")
oZip.SetCompressionLevel(0)
oZip.OpenOrCreate(UrlToFilePath('x-local://trash/archiveCompress_0.zip'))
oZip.AddDirectory(UrlToFilePath('x-local://trash/test_structure'))
oZip.Save()
oZip.Close()
oZip = null

oZip = tools.get_object_assembly("Zip")
oZip.SetCompressionLevel(1)
oZip.OpenOrCreate(UrlToFilePath('x-local://trash/archiveCompress_1.zip'))
oZip.AddDirectory(UrlToFilePath('x-local://trash/test_structure'))
oZip.Save()
oZip.Close()
oZip = null

Результат

setcompressionlevel_0

CreateArchive

Создает пустой архив по переданному пути.
Возвращает 1 при успешном создании архива и 0 - если что-то пошло не так

ВАЖНО

Работает только с файловыми путями. Не работает, если указать путь вида x-local://trash/archive.zip

ВАЖНО

Если такой архив уже существует, то он будет удален и создан новый пустой

Код

oZip = tools.get_object_assembly("Zip")
oZip.CreateArchive(UrlToFilePath('x-local://trash/archive.zip'))
oZip.Save()
oZip.Close()
oZip = null

Результат

createarchive_0

OpenArchive

Открывает существующий архив. Архив доступен только для чтения.
Возвращает 1 при успешном открытии архива и 0 - если что-то пошло не так

Информация

Второй параметр access как будто-бы не работает, в dll указано 6 доступов открытия, но указание любого уровня вторым параметром генерирует ошибку

CreateNew = 1, Create = 2, Open = 3, OpenOrCreate = 4, Truncate = 5, Append = 6,

Код

oZip = tools.get_object_assembly("Zip")
oZip.OpenArchive(UrlToFilePath('x-local://trash/archive.zip'))
var listFiles = oZip.ListFiles()
alert(tools.object_to_text(listFiles, "json"))

oZip.Save()
oZip.Close()
oZip = null

Результат

openarchive_0

OpenOrCreate

Метод позволяет открыть архив и дописать в него файлы, что нельзя сделать через OpenArchive. Если архив не существует, то метод его создает.

Код

oZip = tools.get_object_assembly("Zip")
oZip.CreateArchive(UrlToFilePath('x-local://trash/archive.zip'))
oZip.AddFile(UrlToFilePath('x-local://trash/test_structure/new document.txt'))
oZip.Save()
oZip.Close()
oZip = null

oZip = tools.get_object_assembly("Zip")
oZip.OpenOrCreate(UrlToFilePath('x-local://trash/archive.zip'))
oZip.AddFile(UrlToFilePath('x-local://trash/test_structure/wtv_tools.xml'))
oZip.Save()
oZip.Close()
oZip = null

Результат

openorcreate_0

AddFile/AddFiles

Добавляем один файл

Список файлов

addfiles_files

Код

oZip = tools.get_object_assembly("Zip")
oZip.OpenOrCreate(UrlToFilePath('x-local://trash/archive.zip'))
oZip.AddFile(UrlToFilePath('x-local://trash/test_structure/mask/file_1.txt'))

oZip.Save()
oZip.Close()
oZip = null

Результат

addfile_one

Добавляем несколько файлов используя символ подстановки *

Список файлов

addfiles_files

Код

oZip = tools.get_object_assembly("Zip")
oZip.OpenOrCreate(UrlToFilePath('x-local://trash/archive.zip'))
oZip.AddFile(UrlToFilePath('x-local://trash/test_structure/mask/*.txt'))

oZip.Save()
oZip.Close()
oZip = null

Результат

addfiles_txt_0

AddFilesToPath

Список файлов

addfilestopath_files

Код

oZip = tools.get_object_assembly("Zip")
oZip.CreateArchive(UrlToFilePath('x-local://trash/archive.zip'))
oZip.AddFilesToPath(UrlToFilePath('x-local://trash/test_structure/mask/file_*.docx'), 'deep_folder')

oZip.Save()
oZip.Close()
oZip = null

Результат

Файлы в архиве находятся в папке deep_folder

addfilestopath_0

AddDirectory

Список файлов

adddirectory_structure

Код

oZip = tools.get_object_assembly("Zip")
oZip.CreateArchive(UrlToFilePath('x-local://trash/archive.zip'))
oZip.AddDirectory(UrlToFilePath('x-local://trash/test_structure'))

oZip.Save()
oZip.Close()
oZip = null

Результат

adddirectory_0

AddDirectoryToPath

Список файлов

adddirectorytopath_structure

Код

oZip = tools.get_object_assembly("Zip")
oZip.CreateArchive(UrlToFilePath('x-local://trash/archive.zip'))
oZip.AddDirectoryToPath(UrlToFilePath('x-local://trash/test_structure'), 'deep_folder')

oZip.Save()
oZip.Close()
oZip = null

Результат

adddirectorytopath_0

Extract

Код

oZip = tools.get_object_assembly("Zip")
oZip.OpenArchive(UrlToFilePath('x-local://trash/archive.zip'))
oZip.Extract(UrlToFilePath('x-local://trash/extract_archive/'))

oZip.Close()
oZip = null

Результат

extract_0

ExtractFiles

ВАЖНО

Первый параметр - не используется.
Второй параметр - путь к файлу относительно корня архива. Подстановки не работают

Код

oZip = tools.get_object_assembly("Zip")
oZip.OpenArchive(UrlToFilePath('x-local://trash/archive.zip'))
oZip.ExtractFiles('', 'mask/file_1.txt', UrlToFilePath('x-local://trash/testUnzipFolder'))

oZip.Close()
oZip = null

Результат

extractfiles_0

ListFiles

Код

oZip = tools.get_object_assembly("Zip")
oZip.OpenArchive(UrlToFilePath('x-local://trash/archive.zip'))
var listFiles = oZip.ListFiles()
alert(tools.object_to_text(listFiles, "json"))

oZip.Close()
oZip = null

Результат

listfiles_0