英語版
このページの英語版を見る

std.zip

zipアーカイブのデータを読み書きする zipアーカイブ フォーマットを使用する。
Standards:
現在の実装は ISO/iec 21320-1:2015に準拠している、 に準拠している、
  • ファイルは非圧縮またはdeflateメカニズムを使ってのみ保存できる、
  • 暗号化機能は使用しない、
  • デジタル署名機能を使用しない、
  • パッチされたデータ機能は使用されない。
  • アーカイブは複数のボリュームにまたがってはならない。
さらに、アーカイブはマルウェア攻撃をチェックされ、検出された場合は拒否される。 これには以下が含まれる。
  • zip爆弾 膨大な量の解凍データを生成する
  • 重複したレコードを含むzipアーカイブ
  • カメレオンZIPアーカイブ。 アンパックアルゴリズムの実装に依存する
現在の実装ではzlib圧縮ライブラリを使用している。

使用方法 使い方は主に2通りある:ZIPアーカイブからファイルを取り出す と zip アーカイブにファイルを保存する。これらは混在させることができる。 アーカイブを読み込み、いくつかのファイルを削除し、他のファイルを追加し、新しいアーカイブを書き込む。 を書き込む)。

Examples:
既存のzipアーカイブを読み込む例:
import std.stdio : writeln, writefln;
import std.file : read;
import std.zip;

void main(string[] args)
{
    // zipファイルをメモリに読み込む
    auto zip = new ZipArchive(read(args[1]));

    // すべてのzipメンバを反復処理する
    writefln("%-10s  %-8s  Name", "Length", "CRC-32");
    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;
import std.zip;

void main()
{
    // 各ファイルに対してArchiveMembersを作成する。
    ArchiveMember file1 = new ArchiveMember();
    file1.name = "test1.txt";
    file1.expandedData("Test data.\n".dup.representation);
    file1.compressionMethod = CompressionMethod.none; // 圧縮しない

    ArchiveMember file2 = new ArchiveMember();
    file2.name = "test2.txt";
    file2.expandedData("More test data.\n".dup.representation);
    file2.compressionMethod = CompressionMethod.deflate; // 圧縮する

    // アーカイブを作成し、メンバーを追加する。
    ZipArchive zip = new ZipArchive();

    // アーカイブ・メンバーを追加する
    zip.addMember(file1);
    zip.addMember(file2);

    // アーカイブを構築する
    void[] compressed_data = zip.build();

    // ファイルに書き込む
    write("test.zip", compressed_data);
}
Authors:

ソース std/zip.d

class ZipException: object.Exception;
エラー時にスローされる。
enum CompressionMethod: ushort;
ArchiveMember で使用される圧縮方法。
none
圧縮は行わず、アーカイブする。
deflate
Deflateアルゴリズム。zlibライブラリを使用して圧縮する。
class ArchiveMember;
アーカイブ内の単一のファイルまたはディレクトリ。
string name;
アーカイブメンバーの名前。 アーカイブディレクトリのインデックスに使用される。各メンバーは 一意な名前でなければならない。最初に ディレクトリから削除せずに変更しないこと。
ubyte[] extra;
このメンバの追加データ・フィールドの内容。以下を参照のこと。 オリジナル・ドキュメント を参照のこと。以下が含まれる場合がある。 文書化されていないサードパーティ・データが含まれることがある。
string comment;
このメンバに関連するコメント。
ushort flags;
このアーカイブの抽出方法に関する情報を含む。参照 オリジナルドキュメント を参照のこと。
ushort internalAttributes;
内部属性。メンバーが見かけ上バイナリ形式である場合はビット1がセットされる 各レコードの前にレコードの長さがある場合は、ビット 2 が設定される。
const pure nothrow @nogc @property @safe ushort extractVersion();
このメンバを展開するために必要な zip ファイル形式のバージョン。
Returns:
このメンバの展開に必要なフォーマット・バージョン。
const pure nothrow @nogc @property @safe uint crc32();
巡回冗長検査 (CRC) 値。
Returns:
CRC32 値。
const pure nothrow @nogc @property @safe uint compressedSize();
圧縮されたメンバーのデータサイズ。
Returns:
圧縮アーカイブのサイズ。
const pure nothrow @nogc @property @safe uint expandedSize();
圧縮されていないメンバーのデータサイズ。
Returns:
非圧縮アーカイブのサイズ。
pure nothrow @nogc @property @safe ubyte[] compressedData();
圧縮されたメンバーのデータ
Returns:
圧縮形式のファイルデータ。
pure nothrow @nogc @property @safe ubyte[] expandedData();

@property @safe void expandedData(ubyte[] ed);
非圧縮形式のメンバーのデータを取得または設定する。既存のアーカイブが ZipArchive.expand を呼び出す必要がある。
Parameters:
ubyte[] ed 展開されたデータ。
Returns:
ファイルデータ。
@property @safe void fileAttributes(uint attr);

const nothrow @nogc @property uint fileAttributes();
このアーカイブ・メンバーの OS 固有のファイル属性を取得または設定する。
Parameters:
Returns:
ファイル属性、またはファイル属性が互換性のないOS(WindowsとPOSIX)用にエンコードされている場合は0である。 でエンコードされている場合は 0 を返す。
const pure nothrow @nogc @property @safe DosFileTime time();

@property void time(SysTime time);

pure nothrow @nogc @property @safe void time(DosFileTime time);
このメンバの最終更新時刻を取得または設定する。
Parameters:
SysTime time 設定する時間(DosFileTimeとして保存されるが、これは正確さに欠ける)。
Returns:
DosFileFormat での最終更新時刻。
const pure nothrow @nogc @property @safe CompressionMethod compressionMethod();

pure @property @safe void compressionMethod(CompressionMethod cm);
このメンバに使用される圧縮メソッドを取得または設定する。
Parameters:
CompressionMethod cm 圧縮方法。
Returns:
圧縮方法。
pure nothrow @nogc @property @safe uint index(uint value);

const pure nothrow @nogc @property @safe uint index();
アーカイブ内のこのアーカイブ・メンバーのインデックス。これを アーカイブのメンバーを並べ替えるために別の値を設定する。
Parameters:
uint value 設定するインデックス値。
Returns:
インデックス。
class ZipArchive;
アーカイブ全体を表すオブジェクト。 ZipArchives は ArchiveMembers のコレクションである。
string comment;
アーカイブのコメント。長さは 65536 バイト以下でなければならない。
pure nothrow @nogc @property @safe ubyte[] data();
アーカイブの内容全体を表す配列。
Returns:
アーカイブ全体の内容のデータ。
const pure nothrow @nogc @property @safe uint totalEntries();
ディレクトリ内のArchiveMembersの数。
Returns:
アーカイブ内のファイル数。
const pure nothrow @nogc @property @safe bool isZip64();

pure nothrow @nogc @property @safe void isZip64(bool value);
アーカイブが Zip64 フォーマットの場合は true。これを true に設定すると、強制的に Zip64 アーカイブをビルドする。
Parameters:
bool value アーカイブを強制的に Zip64 形式で構築する場合は true。
Returns:
アーカイブが Zip64 形式である場合に true。
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);
}

Returns:
すべてのアーカイブメンバを持つ連想配列。
pure nothrow @nogc @safe this();
新しいアーカイブを作成するときに使用するコンストラクタ。
@safe void addMember(ArchiveMember de);
アーカイブにメンバーを追加する。ファイルはその場で圧縮される。
Parameters:
ArchiveMember de 追加するメンバー
Throws:
ZipException サポートされていない圧縮メソッドが使われたとき、あるいは が発生する。
@safe void deleteMember(ArchiveMember de);
メンバーを削除する deをアーカイブから削除する。メンバの名前 の名前を使って削除する要素を検出する。
Parameters:
ArchiveMember de 削除するメンバ。
pure @safe void[] build();
アーカイブの現在のメンバーの内容全体を構築する。
プロパティ data[]、totalEntries、directory[] を埋める。 各 ArchiveMember に対して、プロパティ crc32、 compressedSize を埋める、 compressedData[]を埋める。
Returns:
アーカイブ全体を表す配列。
Throws:
アーカイブを構築できなかった場合に ZipException を返す。
this(void[] buffer);
既存のアーカイブを読み込むときに使用するコンストラクタ。
プロパティ data[], totalEntries, comment[], directory[] を埋める。 各 ArchiveMember に対して プロパティ madeVersion, extractVersion, flags, compressionMethod, time、 crc32、compressedSize、expandedSize、compressedData[]、 internalAttributes、externalAttributes、name[]、extra[]、comment[]。 各 ArchiveMember の展開データを取得するには、expand() を使用する。
Parameters:
void[] buffer アーカイブの内容全体。
Throws:
アーカイブが無効な場合やマルウェアが検出された場合は ZipException を返す。
ubyte[] expand(ArchiveMember de);
メンバの内容を解凍する。
プロパティ extractVersion, flags, compressionMethod, time、 crc32、compressedSize、expandedSize、expandedData[]、name[]、extra[]。
Parameters:
ArchiveMember de 解凍されるメンバー。
Returns:
展開されたデータ。
Throws:
エントリが無効な場合や圧縮方式がサポートされていない場合は ZipException が発生する。