3

c++ と libzip ライブラリを使用して実行可能ファイルを解凍しようとしています。同様の質問に対するrodrigoの回答から始めて、次のサンプルコードにたどり着きました。

#include <zip.h>
int main()
{
    //Open the ZIP archive
    int err = 0;
    zip *z = zip_open("foo.zip", 0, &err);

    //Search for the file of given name
    const char *name = "file.txt";
    struct zip_stat st;
    zip_stat_init(&st);
    zip_stat(z, name, 0, &st);

    //Alloc memory for its uncompressed contents
    char *contents = new char[st.size];

    //Read the compressed file
    zip_file *f = zip_fopen(z, "file.txt", 0);
    zip_fread(f, contents, st.size);
    zip_fclose(f);

    //And close the archive
    zip_close(z);
}

私が理解していることから、このコードはファイルを解凍するために機能しますが、winzip のようなツールを使用して zip ファイルを抽出するのと同じように、そのファイルをディスクに書き込む方法がわかりません。解凍されたデータをメモリに保存しても役に立ちませんが、ファイルを実際にディスクに保存する方法がわかりません。

4

1 に答える 1

2

このような何かがそれを行う必要があります:

if(!std::ofstream("file1.txt").write(contents, st.size))
{
    std::cerr << "Error writing file" << '\n';
    return EXIT_FAILURE;
}

std::ofstreamを調べます。

もちろん、zip続行する前に、すべてのファイル関数をチェックして、エラーが返されたかどうかを確認する必要があります。

于 2016-02-11T18:38:52.767 に答える