Libarchive如何将文件解压到指定文件夹?

5
有人能够帮忙展示如何使用 libarchive 来将 ZIP 文件解压到指定文件夹吗?看起来提供的示例程序(untar.ctarfilter.cminitar)都将归档文件解压缩到当前工作目录。是否有一种方法可以告诉 libarchive“解压缩到此文件夹及以下”而不覆盖程序的活动文件夹?
主要驱动因素之一是提取代码将在后台线程中运行,因此更改程序工作目录可能会创建问题。此外,这将用于 iOS 应用程序(iPhone、iPad),该应用程序对其可以写入的文件夹很挑剔。
谢谢。
2个回答

9

在调用archive_read_extract之前,您可以重写每个archive_entry的路径名。例如:

const char* path = archive_entry_pathname( entry );
char newPath[PATH_MAX + 1];
snprintf( newPath, PATH_MAX, "/SomeOtherDirectory/%s", path );
archive_entry_set_pathname( entry, newPath );

1
小提示:PATH_MAX 已经包括了终止的空字符,snprintf 也是一样。应该使用 char newPath[PATH_MAX] - cutsoy

0

untar.c 可以通过在传递给 untar() 的路径名之前添加要使用的路径来轻松修改,从而使其能够实现此功能。

请注意,untar.c 是一个独立的解压缩程序,与 libarchive 分开。

使用 libarchive 也可以轻松实现相同的效果 - 它在解压缩时为您提供了对文件和目录创建的完全控制。


untar.c并不是与libarchive分开的。它是一个独立的程序,但它是静态链接到libarchive的。 - Marcus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接