8

ディレクトリに標準の圧縮形​​式を使用する必要がある C++ アプリケーションがあります。zip形式を使用することを考えました。したがって、zlib は明らかでした。

私の問題は、辞書を構築することです。つまり、いくつかのファイルを含むディレクトリを zlib で標準の zip ファイルに圧縮します。

zlib がそれを行うと読みましたが、その方法がわかりません。minzip コードを確認しました。gzip を使用しているようです。独自のフォーマットを作成することもできますが、デバッグ用に 7z を使用してこれらのファイルを開くことができるようにしたいと考えています (念のため)。

ディレクトリを圧縮するには、zlib で何を使用すればよいですか?

[編集] minzip では、minzip を使用して 1 つのファイルを gz バージョンに圧縮しました -> zip ではありませんが、私には問題ありません。(私は世界中のさまざまなコンパイラでこれを使用します。クライアントのプラットフォームに問題がある場合に備えて、標準形式を使用する方が簡単です)

また、 にこのコードがありmainます。ファイルのリストをループし、出力に書き込みます。しかし、アーカイブ内のファイルの場所に関する情報はどこにあるのでしょうか?

    do {
        if (uncompr) {
            if (copyout) {
                file = gzopen(*argv, "rb");
                if (file == NULL)
                    fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv);
                else
                    gz_uncompress(file, stdout);
            } else {
                file_uncompress(*argv);
            }
        } else {
            if (copyout) {
                FILE * in = fopen(*argv, "rb");

                if (in == NULL) {
                    perror(*argv);
                } else {
                    file = gzdopen(fileno(stdout), outmode);
                    if (file == NULL) error("can't gzdopen stdout");

                    gz_compress(in, file);
                }

            } else {
                file_compress(*argv, outmode);
            }
        }
    } while (argv++, --argc);

これが明らかな場合は申し訳ありません。

4

3 に答える 3

7

minizipを使用して zip ファイルを作成する方法の例については、 minizip.c を参照してください。minizip は、zlib ディストリビューションの contrib ディレクトリにあります。これは、サードパーティが提供したコードであることを意味します。zlib ライブラリの一部ではありません。

gzipは zip ではないことに注意してください。zlib 形式は zip ではありません。生の deflate データは zip ではありません。それらはすべて異なる形式です。raw deflate データは、zip 形式で許可されている圧縮形式の 1 つであり、実際に最も一般的です。zlib は zip ファイルの処理に役立ちますが、それ自体では実行できません。zlib 自体は、圧縮および解凍エンジンと CRC 計算のみを提供します。

于 2013-09-11T07:22:31.490 に答える