我有一个tar文件,我想用libarchive提取到一个特定的目录。如何将libarchive提取到我想要的任何目录?目前它总是提取到我程序的工作目录中。我查看了this answer,但所有这一切都改变了归档中归档条目的位置,即它仍然只是在不同的子目录中提取到我程序的工作目录中。
答案 0 :(得分:14)
我下一步解决了这个问题: (在调用'archive_write_header'函数之前插入此代码)
const char* currentFile = archive_entry_pathname(archiveEntry);
const std::string fullOutputPath = destination + currentFile;
archive_entry_set_pathname(archiveEntry, fullOutputPath.c_str());
其中destination
是输出路径。
它有效。
答案 1 :(得分:6)
来自libarchive讨论区:
“当然,这取决于提取的档案。
通常,你会将chdir()带到你想要输出的目录,然后使用类似于Wiki Examples页面中的代码:
或在untar.c示例程序中:
当然,如果你提取的tar文件有 有趣的文件名(例如“c:\ someotherdirectory”), 然后你需要在提取时使用文件名。
请注意,这些示例都使用archive_read_next_header() 从输入档案中获取一个入口对象 下一个条目;然后,您可以自由编辑该条目说明 以任何你想要的方式 - 特别是,你可以改变 姓名,所有者或权限 - 在致电之前 archive_write_header()重新创建条目 磁盘。
上面Wiki中的示例页面可能是 最佳起点。“