Libarchive для извлечения в указанную папку?

Кто-нибудь может показать примеры использования libarchive для извлечения ZIP-файлов в указанную папку? Похоже, что предоставленные примеры программ ( untar.c , tarfilter.c и minitar ) извлекают архив в текущий рабочий каталог. Есть ли способ сказать «извлечь из этой папки и ниже» в libarchive и не libarchive активную папку программы?

Одним из основных драйверов является то, что код извлечения будет выполняться в фоновом streamе, и, таким образом, изменение рабочего каталога программы может создать проблемы. Также это будет использоваться в приложении iOS (iPhone, iPad), которое придирается к тем папкам, которые приложение может писать.

Заранее спасибо.

Вы можете переписать имя файла archive_entry перед вызовом archive_read_extract. Например:

 const char* path = archive_entry_pathname( entry ); char newPath[PATH_MAX + 1]; snprintf( newPath, PATH_MAX, "/SomeOtherDirectory/%s", path ); archive_entry_set_pathname( entry, newPath ); 

untar.c можно легко изменить, чтобы сделать это, добавив путь, который вы хотите использовать, к пути, который передается create_dir() и create_file() из untar() .

Обратите внимание, что untar.c является автономным декомпрессором, отдельно от libarchive.

Тот же эффект легко реализуется с помощью libarchive – он дает вам полный контроль над созданием файлов и каталогов при распаковке.