我希望能够在我的 C 程序中解压缩文件。我正在寻找一个能够打开和提取 RAR 3 档案的库。我发现很难获得一个合理的。我遇到了 unrarlib ( http://unrarlib.org ),这似乎很有希望,直到我发现它已经严重过时了。谷歌无法给我其他任何东西。
任何帮助将非常感激。
我希望能够在我的 C 程序中解压缩文件。我正在寻找一个能够打开和提取 RAR 3 档案的库。我发现很难获得一个合理的。我遇到了 unrarlib ( http://unrarlib.org ),这似乎很有希望,直到我发现它已经严重过时了。谷歌无法给我其他任何东西。
任何帮助将非常感激。
试试http://packages.ubuntu.com/raring/unrar-free - 这些是最新的。在页面的右侧,有一个指向 .orig.tar.gz 的链接——其中包含源代码。
请注意,rar 是商业产品,它是封闭源代码,并且具有与该技术相关的许可限制。可能没有您可以使用的现成源代码。
链接: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);
}
libarchive很好,但它本身不是最新的(缺少一些功能,例如对加密 RAR 的支持)。
我看到提到了unrar-free。尝试Unarchiver中的 unar/lsar 命令。它功能齐全,您还可以获得对旧 RAR 格式的支持。