2

私は現在 C を学んでおり、zlib を利用する小さなプログラムを作成しようとするといくつかの問題が発生します。

zlib ライブラリを使用して (Codeblocks/MinGW を使用して) アプリケーションをコンパイルすることができ、コンパイルは正常に動作します。公式の zlib サイト (zlib.net)にあるzpipe.cの例に基づいた例を使用しました。

実行時に、出力 zip ファイルが作成されますが、形式が正しくないか空であると思われます。7zipを使用して開くことができません。

これが私が修正したコードです。zpipe.c 内の main() 関数を単純に置き換えました。

int main() {
    printf("Compression test...");

    int ret;
    FILE *fpsource;
    FILE *fpdest;

    fpsource = fopen("test.txt", "rb");
    fpdest = fopen("output.zip", "wb");

    ret = def(fpsource, fpdest, Z_DEFAULT_COMPRESSION);
    if (ret != Z_OK) {
        printf("failure\n");
        zerr(ret);
    }
    else {
        printf("success..\n");
    }

    fclose(fpsource);
    fclose(fpdest);

    return EXIT_SUCCESS;
}

エラーは発生せず、「成功」メッセージが出力されます。出力ファイルが壊れているだけです。

4

2 に答える 2

4

説明したコードは、DEFLATE アルゴリズムを使用してファイルを圧縮するだけです。zip または gzip ファイルにする適切な構造がありません。

于 2012-06-21T11:57:32.103 に答える
4

zpipe.c はそのままで zlib フォーマットを生成します。これは、zlib ヘッダーとトレーラでラップされた生の deflate データです。7zipはそれを認識しません。gzip または zip 形式を認識しますが、これらは同じ未加工の deflate データに対する完全に異なるラッパーです。

zlib 形式の代わりに gzip 形式を選択するために、「2」のないバージョンの代わりに deflateInit2 (および inflateInit2) を使用するように zpipe.c を変更できます。これを行う方法については、 zlib.hを参照してください。

于 2012-06-21T15:51:23.417 に答える