2011-12-05 140 views
7

我有一个tar文件,我想用libarchive解压到一个特定的目录。我怎样才能让libarchive extract进入我想要的任何目录?目前它总是提取到我的程序的工作目录。我查看了this answer,但所有这些都改变了归档文件中归档项的位置,即它仍然在我的程序的工作目录中提取了不同的子目录。libarchive - 解压到指定的目录

+0

我只能通过将我的程序的工作目录更改为我想要的导演y,使用libarchive完成解压缩工作,然后将其更改回来。这很脏 – oggmonster

回答

6

从libarchive讨论区:

“这取决于,当然,对所提取的存档

通常情况下,你会CHDIR()到您想要的输出去的目录,然后。使用类似于代码在Wiki实例页面:

A Complete Extractor Example

或在untar.c示例程序:

untar Example

当然,如果你提取tar文件具有 有趣的文件名(如“C:\ someotherdirectory”), 那么你就需要为你提取与文件名玩。

请注意,这些示例全部使用archive_read_next_header() 从输入存档中获取描述 下一个条目的条目对象;然后您可以以任何您希望的方式自由编辑条目描述 - 尤其是,您可以在致电 archive_write_header()重新创建 磁盘上的条目之前更改 名称,所有者或权限。

以上在Wiki的例子页面可能开始 最好的地方“

12

我解决了这个问题,接下来方式:

const char* currentFile = archive_entry_pathname(archiveEntry); 
    const std::string fullOutputPath = destination + currentFile; 
    archive_entry_set_pathname(archiveEntry, fullOutputPath.c_str()); 
(叫‘archive_write_header’功能之前插入此代码)

其中destination是输出路径 它的工作原理