2011-12-05 102 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是輸出路徑 它的工作原理