2010-12-21 2 views
3

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

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

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

ответ

0

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

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

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

+0

untar.c не отделен от libarchive. Его автономный, правильный, но он статически связан с либрахистом. – Marcus

6

Вы можете переписать имя каждого файла 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); 
+1

Небольшое примечание: 'PATH_MAX' уже включает в себя завершающий нуль, как и' snprintf'. Он должен быть 'char newPath [PATH_MAX]'. – elslooo

Смежные вопросы