【问题标题】:Libarchive to extract to a specified folder?Libarchive 解压到指定文件夹?
【发布时间】:2010-12-21 03:25:29
【问题描述】:

谁能帮助展示使用libarchive 将ZIP 文件解压缩到指定文件夹的示例?看起来提供的示例程序(untar.ctarfilter.cminitar)都将存档解压缩到当前工作目录。有没有办法对libarchive 说“提取到此文件夹及以下文件夹”而不破坏程序的活动文件夹?

其中一个主要驱动因素是提取代码将在后台线程中运行,因此更改程序工作目录可能会产生问题。这也将用于 iOS 应用程序(iPhone、iPad),它对应用程序可以写入的文件夹很挑剔。

提前致谢。

【问题讨论】:

    标签: iphone c zip extraction compression


    【解决方案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。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 2019-09-02
    • 2020-07-05
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多