Libarchive pour extraire dans un dossier spécifié?

Quelqu’un peut-il aider à montrer des exemples d’utilisation de libarchive pour extraire des fichiers ZIP dans un dossier spécifié? Il semble que les exemples de programmes fournis ( untar.c , tarfilter.c et minitar ) minitar tous les archives dans le répertoire de travail en cours. Y at-il un moyen de dire “extraire dans ce dossier et ci-dessous” à libarchive et ne pas obstruer le dossier actif du programme?

L’un des principaux pilotes est que le code d’extraction sera exécuté dans un thread en arrière-plan, ce qui peut créer des problèmes en modifiant le répertoire de travail du programme. De plus, cela sera utilisé dans une application iOS (iPhone, iPad), ce qui est difficile sur les dossiers dans lesquels l’application peut écrire.

Merci d’avance.

    Vous pouvez réécrire le chemin de chaque archive_entry avant d’appeler archive_read_extract. Par exemple:

     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 peut être facilement modifié pour ce faire en ajoutant le chemin que vous voulez utiliser au chemin d’access passé à create_dir() et à create_file() partir de untar() .

    Notez que untar.c est un décompresseur autonome, séparé de libarchive.

    Le même effet est facilement réalisable avec libarchive: cela vous donne un contrôle total sur la création de fichiers et de répertoires lors de la désarchivage.