C ++使用zlib.h提取winrar文件夹

时间:2017-09-14 18:24:36

标签: c++ extract zlib

我想使用带有zlib的c ++将.rar文件解压缩到一个文件夹。

我的代码:

int main (){
    gzFile infile = gzopen("C:\\Users\\Nico\\Desktop\\a.rar", "rb");
    FILE *outfile = fopen("C:\\Users\\Nico\\Desktop\\ToThisFolder", "wb");

    if (!infile || !outfile) {
        return -1;
    }

    char buffer[128];
    int num_read = 0;
    while ((num_read = gzread(infile, buffer, sizeof(buffer))) > 0) {
        fwrite(buffer, 1, num_read, outfile);
    }

    gzclose(infile);
    fclose(outfile);
}

如果我运行代码,我的程序总是返回-1,因为他不接受输出文件。

如果查看我的outfile,我想将输出放到一个文件夹中。

我该怎么做?

ThecCode来自 http://www.codeguru.com/cpp/cpp/algorithms/compression/article.php/c11735/zlib-Add-Industrial-Strength-Compression-to-Your-CC-Apps.htm

由于

1 个答案:

答案 0 :(得分:0)

您无法使用fopen()打开文件夹,只能打开文件。因此outFile为NULL。

要将RAR(或任何其他存档格式)提取到文件夹,您必须打开存档并枚举其存储的文件,将每个文件单独提取到单独的打开文件中。

open archive
for (each file in archive)
{
    create output file
    read archive file data, write to output file
    close output file
}
close archive

话虽如此,您无法使用ZLib库来处理RAR存档。它仅支持ZLib和GZip文件。您需要一个实际支持RAR的库,例如WinRAR,7-Zip等提供的库。