2011-12-05 10 views
7

Tengo un archivo tar que quiero extraer con libarchive a un directorio específico. ¿Cómo puedo hacer que libarchive extracto en cualquier directorio que quiero? Por el momento siempre se extrae en el directorio de trabajo de mi programa. Miré en this answer pero todo lo que hace es cambiar la ubicación de una entrada de archivo dentro del archivo, es decir, todavía se extrae en el directorio de trabajo de mi programa solo en un subdirectorio diferente.libarchive - Extracto del directorio especificado

+0

La única manera en que puedo hacer que extraiga donde quiero es cambiando el directorio de trabajo de mi programa a mi director deseado y, haciendo el trabajo de extracción con libarchive, y luego cambiándolo de nuevo. Esto es sucio – oggmonster

Respuesta

6

Desde los foros de discusión libarchive:

"Depende, por supuesto, en el archivo que se extrae

Normalmente, se chdir() para el directorio en el que desea que la salida vaya, entonces. utilizar código similar a la de la página Ejemplos wiki:

A Complete Extractor Example

o en el programa de ejemplo untar.c:

untar Example

Por supuesto, si el archivo tar que está extrayendo tiene nombres de archivos interesantes (por ejemplo, "c: \ someotherdirectory"), entonces tendrá que jugar con los nombres de archivo como a extraer.

Tenga en cuenta que todos los ejemplos usan archive_read_next_header() para obtener un objeto de entrada del archivo de entrada que describe la siguiente entrada; puede editar la descripción de la entrada de la manera que desee, en particular, puede cambiar el nombre , el propietario o los permisos antes de llamar al archive_write_header() para volver a crear la entrada en el disco .

La página de ejemplos en el Wiki anterior es probablemente la mejor lugar para empezar "

12

resolví este problema siguiente manera:. (inserte el código antes de llamar a la función 'archive_write_header')

const char* currentFile = archive_entry_pathname(archiveEntry); 
    const std::string fullOutputPath = destination + currentFile; 
    archive_entry_set_pathname(archiveEntry, fullOutputPath.c_str()); 

donde es la ruta de salida Y funciona

Cuestiones relacionadas