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
Odpowiedz
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:
lub w untar.c przykładowy program:
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ąć „
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.
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