std.zip

Переметиться к: ArchiveMember · CompressionMethod · ZipArchive · ZipException

Чтение/запись данных в формате zip-архива. Использует библиотеку сжатия etc.c.zlib.
Недостатки:

Пример:

// Прочитать существующий zip-файл.
import std.digest.crc, std.file, std.stdio, std.zip;

void main(string[] args)
{
   // чтение zip-файла в память
   auto zip = new ZipArchive(read(args[1]));
   writeln("Archive: ", args[1]);
   writefln("%-10s  %-8s  Name", "Length", "CRC-32");
   // перебрать в цикле все члены zip-архива
   foreach (name, am; zip.directory)
   {
       // вывести некоторые данные о каждом члене архива
       writefln("%10s  %08x  %s", am.expandedSize, am.crc32, name);
       assert(am.expandedData.length == 0);
       // распаковать архивный файл
       zip.expand(am);
       assert(am.expandedData.length == am.expandedSize);
   }
}

// Создание и запись нового zip-файла.
import std.file : write;
import std.string : representation;

void main()
{
   char[] data = "Test data.\n".dup;
   // Создать объект ArchiveMember для тестового файла. 
   ArchiveMember am = new ArchiveMember();
   am.name = "test.txt";
   am.expandedData(data.representation);
   // Создать архив и добавить в него новый член.
   ZipArchive zip = new ZipArchive();
   zip.addMember(am);
   // Построить архив.
   void[] compressed_data = zip.build();
   // Записать в файл.
   write("test.zip", compressed_data);
}

Лицензия:
Boost License 1.0.
Авторы:
Walter Bright

Исходный код: std/zip.d

class ZipException: object.Exception;
Исключение, выбрасываемое при ошибке.

Переметиться к: deflate · none

enum CompressionMethod: ushort;
Метод сжатия, используемый в ArchiveMember
none
Без сжатия, просто архивирование
deflate
Алгоритм deflate. Для сжатия используется библиотека zlib .
class ArchiveMember;
Член объекта ZipArchive.
string name;
Чтение/запись: обычно является именем файла члена архива; используется для индексации члена в каталоге архива. Каждый член должен иметь уникальное имя name[]. Не изменяйте без удаления члена из каталога.
ubyte[] extra;
Чтение/запись: дополнительные данные для этого члена.
string comment;
Чтение/запись: комментарий, связанный с этим членом.
ushort flags;
Чтение/запись: обычно устанавливается в 0
ushort internalAttributes;
Чтение/запись
@property ushort extractVersion();
Только чтение
@property uint crc32();
Только чтение: значение контрольной суммы cyclic redundancy check (CRC)
@property uint compressedSize();
Только чтение: размер данных члена в сжатой форме.
@property uint expandedSize();
Только чтение: размер данных члена в несжатой форме.
@property ushort diskNumber();
Только чтение: должно быть 0.
@property ubyte[] compressedData();
Только чтение: данные члена в сжатой форме.

Переметиться к: 2

@property ubyte[] expandedData();
Прочитать данные члена в несжатой форме.
@property @safe void expandedData(ubyte[] ed);
Записать данные члена в несжатой форме.

Переметиться к: 2

@property @safe void fileAttributes(uint attr);
Установить специфичные для Операционной системы атрибуты файла, полученные с помощью std.file.getAttributes или std.file.DirEntry.attributes для этого члена архива.
const @property uint fileAttributes();
Получить специфичные для Операционной системы атрибуты файла для этого члена архива.
Возвращает:
Атрибуты файла или 0, если атрибуты файла были закодированы для несовместимой ОС (Windows в противоположность Posix).

Переметиться к: 2

@property void time(SysTime time);

@property void time(DosFileTime time);
Установить последнее время модификации для этого члена.
const @property DosFileTime time();
Получить последнее время модификации для этого члена.

Переметиться к: 2

@property @safe CompressionMethod compressionMethod();
Прочитать метод сжатия, используемый для этого члена
Смотрите также:
CompressionMethod
@property void compressionMethod(CompressionMethod cm);
Установить метод сжатия, используемый для этого члена
Смотрите также:
CompressionMethod
const pure nothrow @nogc @property uint index();
Индекс этого члена архива в составе архива.

Переметиться к: addMember · build · comment · data · deleteMember · directory · diskNumber · diskStartDir · expand · isZip64 · numEntries · this · totalEntries

class ZipArchive;
Объект, представляющий весь архив. Объекты ZipArchive – это коллекции объектов ArchiveMember.
string comment;
Чтение/запись: комментарий к архиву. Размер должен быть меньше, чем 65536 байт.
@property @safe ubyte[] data();
Только чтение: массив, представляющий всё содержимое архива.
@property @safe uint diskNumber();
Только чтение: 0, так как multi-disk zip-архивы не поддерживаются.
@property @safe uint diskStartDir();
Только чтение: 0, так как multi-disk zip-архивы не поддерживаются.
@property @safe uint numEntries();

@property @safe uint totalEntries();
Только чтение: количество объектов ArchiveMember в каталоге.

Переметиться к: 2

@property @safe bool isZip64();
true, когда архив находится в формате Zip64.
@property @safe void isZip64(bool value);
Установить значение true для принудительного создания архива в формате Zip64.
@property @safe ArchiveMember[string] directory();
Только чтение: массив, индексирующий по имени каждый член архива. Доступ ко всем членам архива можно получить с помощью цикла foreach:

Пример:

ZipArchive archive = new ZipArchive(data);
foreach (ArchiveMember am; archive.directory)
{
    writefln("member name is '%s'", am.name);
}

Переметиться к: 2

@safe this();
Конструктор, используемый при создании нового архива.
@safe void addMember(ArchiveMember de);
Добавление de в архив.
@safe void deleteMember(ArchiveMember de);
Удаление de из архива.
void[] build();
Создание архива из текущих членов архива.
Заполняет свойства data[], diskNumber, diskStartDir, numEntries, totalEntries, и directory[]. Для каждого объекта ArchiveMember заполняются свойства crc32, compressedSize, compressedData[].
Возвращает:
массив, представляющий весь архив.
this(void[] buffer);
Конструктор, используемый при чтении существующего архива.
Заполняет свойства data[], diskNumber, diskStartDir, numEntries, totalEntries, comment[], и directory[]. Для каждого объекта ArchiveMember заполняются свойства madeVersion, extractVersion, flags, compressionMethod, time, crc32, compressedSize, expandedSize, compressedData[], diskNumber, internalAttributes, externalAttributes, name[], extra[], comment[]. Используйте expand(), чтобы получить несжатые данные для каждого ArchiveMember.
Параметры:
void[] buffer всё содержимое архива.
ubyte[] expand(ArchiveMember de);
Разжимает (decompress) содержимое члена архива de и возвращает несжатые данные.
Заполняет свойства extractVersion, flags, compressionMethod, time, crc32, compressedSize, expandedSize, expandedData[], name[], extra[].