Libarchive 解压到指定文件夹?
Posted
技术标签:
【中文标题】Libarchive 解压到指定文件夹?【英文标题】:Libarchive to extract to a specified folder? 【发布时间】:2010-12-21 03:25:29 【问题描述】:谁能帮助展示使用libarchive
将ZIP 文件解压缩到指定文件夹的示例?看起来提供的示例程序(untar.c
、tarfilter.c
和 minitar
)都将存档解压缩到当前工作目录。有没有办法对libarchive
说“提取到此文件夹及以下文件夹”而不破坏程序的活动文件夹?
其中一个主要驱动因素是提取代码将在后台线程中运行,因此更改程序工作目录可能会产生问题。这也将用于 ios 应用程序(iPhone、iPad),它对应用程序可以写入的文件夹很挑剔。
提前致谢。
【问题讨论】:
【参考方案1】:您可以在调用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 );
【讨论】:
小注:PATH_MAX
已经包含了终止的 nul,snprintf
也是如此。应该是char newPath[PATH_MAX]
。【参考方案2】:
untar.c
可以通过将要使用的路径添加到从untar()
传递给create_dir()
和create_file()
的路径名前面来轻松修改。
注意untar.c
是一个独立的解压器,独立于 libarchive。
使用 libarchive 可以轻松实现相同的效果 - 它使您可以在取消归档时完全控制文件和目录的创建。
【讨论】:
untar.c 不与 libarchive 分开。它是独立的,正确的,但它静态链接到 libarchive。以上是关于Libarchive 解压到指定文件夹?的主要内容,如果未能解决你的问题,请参考以下文章