【问题标题】:C++ extract winrar folder using zlib.hC++ 使用 zlib.h 提取 winrar 文件夹
【发布时间】:2017-09-14 18:24:36
【问题描述】:

我想使用 c++ 和 zlib 将 .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,因为他不接受输出文件。

如果您查看我的输出文件,我想将输出放入文件夹中。

我该怎么做?

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

谢谢

【问题讨论】:

  • zlib 是否处理 rar 文件?我希望 .gz 文件,但不是 rar。
  • 不一定是rar文件。
  • 如果是gzip文件,为什么要命名为a.rar?只是一个坏例子??
  • 我是 C++ 新手。我只找到了这个页面。如果没有 gzip,我该如何处理?
  • 如果你想读取 rar 文件,你需要使用不同的库。

标签: c++ extract zlib


【解决方案1】:

您不能使用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等提供的库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 2010-11-21
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    相关资源
    最近更新 更多