std.zip
Чтение и запись данных в формате архива zip.
- Стандарты:
- Текущая реализация в основном соответствует ISO/IEC 21320-1:2015, что означает,
- что файлы могут храниться только без сжатия или с использованием механизма deflate,
- что функции шифрования не используются,
- что функции цифровой подписи не используются,
- что функции данных с патчами не используются, и
- что архивы могут не занимать несколько томов.
- zip-бомбы, которые генерируют огромные объёмы распакованных данных
- zip-архивы, содержащие перекрывающиеся записи
- архивы zip-хамелеоны, которые генерируют различные распакованные данные в зависимости от реализации алгоритма распаковки
- Использование
- Существует два основных способа использования: извлечение файлов из zip-архива и сохранение файлов в zip-архиве. Их можно комбинировать (например, прочитать архив, удалить некоторые файлы, добавить другие и записать новый архив).
- Примеры:
- Пример чтения существующего zip-архива:
import std.stdio : writeln, writefln; import std.file : read; import std.zip; void main(string[] args) { // read a zip file into memory auto zip = new ZipArchive(read(args[1])); // iterate over all zip members writefln("%-10s %-8s Name", "Length", "CRC-32"); foreach (name, am; zip.directory) { // print some data about each member writefln("%10s %08x %s", am.expandedSize, am.crc32, name); assert(am.expandedData.length == 0); // decompress the archive member zip.expand(am); assert(am.expandedData.length == am.expandedSize); } }Пример записи файлов в zip-архив:import std.file : write; import std.string : representation; import std.zip; void main() { // Create an ArchiveMembers for each file. ArchiveMember file1 = new ArchiveMember(); file1.name = "test1.txt"; file1.expandedData("Test data.\n".dup.representation); file1.compressionMethod = CompressionMethod.none; // don't compress ArchiveMember file2 = new ArchiveMember(); file2.name = "test2.txt"; file2.expandedData("More test data.\n".dup.representation); file2.compressionMethod = CompressionMethod.deflate; // compress // Create an archive and add the member. ZipArchive zip = new ZipArchive(); // add ArchiveMembers zip.addMember(file1); zip.addMember(file2); // Build the archive void[] compressed_data = zip.build(); // Write to a file write("test.zip", compressed_data); }
- Лицензия:
- Лицензия Boost 1.0.
- Авторы:
- Walter Bright
- Исходный код
- std/zip.d
- класс ZipException: object.Exception;
-
Выбрасывается при ошибке.
- перечисление CompressionMethod: ushort;
-
Метод сжатия, используемый
ArchiveMember.- none
-
Без сжатия, только архивирование.
- deflate
-
Алгоритм deflate. Использует библиотеку zlib для сжатия.
- класс ArchiveMember;
-
Один файл или каталог внутри архива.
- строка name;
-
Имя элемента архива; используется для индексации каталога архива для элемента. У каждого элемента должно быть уникальное имя. Не изменяйте, не удалив элемент из каталога сначала.
- ubyte[] extra;
-
Содержимое поля дополнительных данных для этого элемента. См. исходную документацию для описания общего формата этих данных. Может содержать недокументированные данные сторонних разработчиков.
- строка comment;
-
Комментарий, связанный с этим элементом.
- ushort flags;
-
Содержит информацию о том, как извлечь этот архив. См. исходную документацию для получения подробностей.
- ushort internalAttributes;
-
Внутренние атрибуты. Бит 1 установлен, если элемент, по-видимому, в двоичном формате, и бит 2 установлен, если каждая запись предваряется длиной записи.
- const pure nothrow @nogc @property @safe ushort extractVersion();
-
Версия формата zip-файла, необходимая для извлечения этого элемента.
- Возвращает:
- Версия формата, необходимая для извлечения этого элемента.
- const pure nothrow @nogc @property @safe uint crc32();
-
Значение контрольной суммы CRC.
- Возвращает:
- Значение CRC32.
- const pure nothrow @nogc @property @safe uint compressedSize();
-
Размер данных элемента в сжатом виде.
- Возвращает:
- Размер сжатого архива.
- const pure nothrow @nogc @property @safe uint expandedSize();
-
Размер данных элемента в несжатом виде.
- Возвращает:
- Размер несжатого архива.
- устаревшее const pure nothrow @nogc @property @safe ushort diskNumber();
-
Должно быть 0.
- Возвращает:
- Номер диска, на котором находится этот элемент.
- pure nothrow @nogc @property @safe ubyte[] compressedData();
-
Данные элемента в сжатом виде.
- Возвращает:
- Данные файла в сжатом виде.
- pure nothrow @nogc @property @safe ubyte[] expandedData();
@property @safe void expandedData(ubyte[] ed); -
Получить или установить данные элемента в несжатом виде. При чтении существующего архива необходимо вызвать
ZipArchive.expandпрежде чем получить доступ к этим данным.- Параметры:
ubyte[] edРасширенные данные.
- Возвращает:
- Данные файла.
- @property @safe void fileAttributes(uint attr);
const nothrow @nogc @property uint fileAttributes(); -
Получить или установить атрибуты файла, специфичные для ОС, для этого элемента архива.
- Параметры:
uint attrАтрибуты, полученные с помощью std.file.getAttributesилиstd.file.DirEntry.attributes.
- Возвращает:
- Атрибуты файла или 0, если атрибуты файла были закодированы для несовместимой ОС (Windows против POSIX).
- const pure nothrow @nogc @property @safe DosFileTime time();
@property void time(SysTime time);
pure nothrow @nogc @property @safe void time(DosFileTime time); -
Получить или установить время последнего изменения для этого элемента.
- Параметры:
SysTime timeВремя для установки (будет сохранено как DosFileTime, что менее точно).
- Возвращает:
- Время последнего изменения в формате DosFileFormat.
- const pure nothrow @nogc @property @safe CompressionMethod compressionMethod();
pure @property @safe void compressionMethod(CompressionMethod cm); -
Получить или установить метод сжатия, используемый для этого элемента.
- Параметры:
CompressionMethod cmМетод сжатия.
- Возвращает:
- Метод сжатия.
- См. также:
CompressionMethod
- pure nothrow @nogc @property @safe uint index(uint value);
const pure nothrow @nogc @property @safe uint index(); -
Индекс этого элемента архива в пределах архива. Установите это значение для другого переупорядочивания элементов архива.
- Параметры:
uint valueЗначение индекса для установки.
- Возвращает:
- Индекс.
- класс ZipArchive;
-
Объект, представляющий весь архив. ZipArchives — это коллекции ArchiveMembers.
- string comment;
-
Комментарий к архиву. Длина должна быть меньше 65536 байт.
- pure nothrow @nogc @property @safe ubyte[] data();
-
Массив, представляющий все содержимое архива.
- Возвращает:
- Данные всего содержимого архива.
- deprecated const pure nothrow @nogc @property @safe uint diskNumber();
-
0, так как архивы с несколькими дисками не поддерживаются.
- Возвращает:
- Номер диска.
- deprecated const pure nothrow @nogc @property @safe uint diskStartDir();
-
0, так как архивы с несколькими дисками не поддерживаются.
- Возвращает:
- Номер диска, с которого начинается центральный каталог.
- deprecated const pure nothrow @nogc @property @safe uint numEntries();
const pure nothrow @nogc @property @safe uint totalEntries(); -
Количество ArchiveMembers в каталоге.
- Возвращает:
- Количество файлов в этом архиве.
- const pure nothrow @nogc @property @safe bool isZip64();
pure nothrow @nogc @property @safe void isZip64(bool value); -
Истинно, если архив находится в формате Zip64. Установите это значение в true, чтобы принудительно создать архив Zip64.
- Параметры:
bool valueИстинно, если архив должен быть создан в формате Zip64.
- Возвращает:
- Истинно, если архив находится в формате Zip64.
- pure nothrow @nogc @property @safe ArchiveMember[string] directory();
-
Ассоциативный массив, индексируемый именем каждого члена архива.
Все члены архива могут быть доступны с помощью цикла foreach:
- Пример
ZipArchive archive = new ZipArchive(data); foreach (ArchiveMember am; archive.directory) { writefln("member name is '%s'", am.name); }- Возвращает:
- Ассоциативный массив со всеми членами архива.
- pure nothrow @nogc @safe this();
-
Конструктор для создания нового архива.
- @safe void addMember(ArchiveMember de);
-
Добавить член в архив. Файл сжимается на лету.
- Параметры:
ArchiveMember deЧлен, который нужно добавить.
- Исключения:
- ZipException, если используется неподдерживаемый метод сжатия или сжатие не удалось.
- @safe void deleteMember(ArchiveMember de);
-
Удалить член
deиз архива. Используется имя члена для определения элемента для удаления.- Параметры:
ArchiveMember deЧлен, который нужно удалить.
- pure @safe void[] build();
-
Создать все содержимое текущих членов архива.
Заполняет свойства data[], totalEntries и directory[]. Для каждого ArchiveMember заполняет свойства crc32, compressedSize, compressedData[].
- Возвращает:
- Массив, представляющий весь архив.
- Исключения:
- ZipException, если архив не может быть создан.
- this(void[] buffer);
-
Конструктор для чтения существующего архива.
Заполняет свойства data[], totalEntries, comment[] и directory[]. Для каждого ArchiveMember заполняет свойства madeVersion, extractVersion, flags, compressionMethod, time, crc32, compressedSize, expandedSize, compressedData[], internalAttributes, externalAttributes, name[], extra[], comment[]. Используйте expand(), чтобы получить расширенные данные для каждого ArchiveMember.
- Параметры:
void[] bufferВсе содержимое архива.
- Исключения:
- ZipException, если архив был невалиден или если был обнаружен вредоносный код.
- ubyte[] expand(ArchiveMember de);
-
Разархивировать содержимое члена.
Заполняет свойства extractVersion, flags, compressionMethod, time, crc32, compressedSize, expandedSize, expandedData[], name[], extra[].
- Параметры:
ArchiveMember deЧлен, который нужно разархивировать.
- Возвращает:
- Расширенные данные.
- Исключения:
- ZipException, если запись невалидна или метод сжатия не поддерживается.
© 1999–2021 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/std_zip.html