【问题标题】:Looking for an up-to-date C Rar library [closed]寻找最新的 C Rar 库 [关闭]
【发布时间】:2013-07-01 23:26:39
【问题描述】:

我希望能够在我的 C 程序中解压缩文件。我正在寻找一个能够打开和提取 RAR 3 档案的库。我发现很难获得一个合理的。我遇到了 unrarlib (http://unrarlib.org),它看起来很有希望,直到我发现它已经严重过时了。 Google 无法提供其他任何信息。

任何帮助将不胜感激。

【问题讨论】:

  • 您应该明确在“现代”库中需要什么。否则,这个问题很可能会被关闭。祝你好运!
  • 如果您从该页面指向的“原始源代码”中删除文件名,则会出现一个包含最近日期的大量目录。 ftp.rarlabs.com/rar

标签: c rar


【解决方案1】:

试试http://packages.ubuntu.com/raring/unrar-free - 这些是最新的。在页面的右侧,有一个指向 .orig.tar.gz 的链接 - 其中包含源代码。

请注意,rar 是商业产品,它是封闭源代码,并且具有与技术相关的许可限制。可能没有现成的源代码可供您使用。

【讨论】:

  • 谢谢,我会试试我的运气。似乎我确实无法找到一些简单的代码。
【解决方案2】:

链接:libarchive 和他们的github。

起初它可能看起来有点过时,但一旦你理解它就会很好地流动。我添加了一个示例程序,它 95% 是他们简单阅读示例的副本。

#include <stdio.h>
#include <archive.h>

int main() {

    struct archive_entry *ae;
    const char * filename = "test.rar";
    int r;
    size_t size;

    struct archive *a = archive_read_new();
    archive_read_support_compression_all(a);
    archive_read_support_format_rar(a);
    r = archive_read_open_filename(a, filename, 16384);
    if (r != ARCHIVE_OK) {
        /* ERROR */
    }   
    r = archive_read_next_header(a, &ae);
    if (r != ARCHIVE_OK) {
        /* ERROR */
    }   

    char buff[1000];
    int buffsize = sizeof(buff);

    for (;;) {
        size = archive_read_data(a, buff, buffsize);
        if (size < 0) {
            /* ERROR */
        }
        if (size == 0)
            break;
        write(1, buff, size);
    }

    archive_read_free(a);
}

【讨论】:

    【解决方案3】:

    libarchive 很好,但它本身不是最新的(缺少一些功能,例如对加密 RAR 的支持)。

    我看到提到了 unrar-free。尝试来自The Unarchiver 的 unar/lsar 命令。它功能齐全,您还可以获得对旧 RAR 格式的支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-04-04
      • 2012-01-21
      • 2017-02-04
      • 2011-08-02
      • 1970-01-01
      相关资源
      最近更新 更多