Из архива распаковать в указанную папку? - PullRequest
4 голосов
/ 21 декабря 2010

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

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

Ответы [ 2 ]

7 голосов
/ 07 апреля 2011

Вы можете переписать каждый путь к 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 );
0 голосов
/ 21 декабря 2010

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

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

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

...