2011-12-05 14 views
7

Mam plik tar, który chcę wyodrębnić z libarchive do określonego katalogu. W jaki sposób mogę utworzyć libarchive extract w dowolnym katalogu, który chcę? W tej chwili zawsze wyodrębnia się do katalogu roboczego mojego programu. Spojrzałem na this answer, ale wszystko to zmienia lokalizację wpisu archiwum w archiwum, tzn. Nadal wyodrębnia się do katalogu roboczego mojego programu właśnie w innym podkatalogu.libarchive - Wyodrębnij do określonego katalogu

+0

Jedyny sposób, w jaki mogę go wydobyć tam, gdzie chcę, zmieniając katalog roboczy mojego programu na żądanego dyrektora y, wykonując ekstrakt z libarchive, a następnie zmieniając go z powrotem. To jest brudne – oggmonster

Odpowiedz

6

Z libarchive dyskusyjnych:

„To zależy, oczywiście, na archiwum wyodrębniania

Zazwyczaj byś chdir() do katalogu, w którym chcesz wyjście iść, wtedy. użyć kodu podobnego do tego na stronie przykładów Wiki:

A Complete Extractor Example

lub w untar.c przykładowy program:

untar Example

Oczywiście, jeśli plik tar jesteś wydobycia ma ciekawe nazwy plików (takich jak „c: \ someotherdirectory”), to musisz grać z nazwami jak wyodrębnić.

Zwróć uwagę, że wszystkie przykłady używają archive_read_next_header() , aby uzyskać obiekt wejścia z archiwum wejściowego opisujący następny wpis w postaci ; możesz dowolnie edytować opis wpisu w dowolnej formie - w szczególności możesz zmienić nazwę, właściciela lub uprawnienia - przed wywołaniem archive_write_header(), aby odtworzyć wpis na dysku .

Strona Przykłady w Wiki powyżej jest prawdopodobnie najlepszym miejscem zacząć „

12

I Rozwiązaliśmy ten problem następny sposób:. (wpisać ten kod przed wywołaniem funkcji«archive_write_header»)

const char* currentFile = archive_entry_pathname(archiveEntry); 
    const std::string fullOutputPath = destination + currentFile; 
    archive_entry_set_pathname(archiveEntry, fullOutputPath.c_str()); 

gdzie ścieżka wyjściowa to destination. I działa.

Powiązane problemy