2014-07-03 21 views
6

Nel mio programma linux, voglio decomprimere un contenuto del file tar.gz in una directory specifica. Esiste una chiamata di sistema o una classe C++ disponibile in C/C++ per estrarre il contenuto del file dal file tar.gz?Come decomprimere il file tar.gz utilizzando il programma C++

+1

[tar] (http://stackoverflow.com/questions/4812837/c-library-to-make-tar-files) e [gz] (http://stackoverflow.com/questions/624250/how- do-i-read-write-gzipped-files) – Unda

+0

possibile duplicato di [Come leggere un file .gz riga per riga in C++?] (http://stackoverflow.com/questions/3201538/how-to- read-a-gz-file-line-by-line-in-c) – bobah

+0

@bobah: questo non è un duplicato. la domanda collegata parla di un singolo file .gz, mentre questo riguarda l'archivio .tar.gz con molti file in esso – mvp

risposta

0

Se si include <cstdlib> si può chiamare:

system("your tar or gz command"); 
+0

Sono a conoscenza di questa chiamata di sistema(). Ho usato il mio programma consecutivamente 3 volte per diversi file tar.gz, ma il programma si è bloccato dopo l'esecuzione del 3 con indicazione dello stack. Poiché la chiamata a system() esegue il comando come processo secondario o altro processo. In caso di chiamata consecutiva, lo stack si arresta in modo anomalo. – user3793746

+0

hai ricevuto un rapporto di arresto anomalo? – PinkFloyd

0

È possibile utilizzare diverse librerie come libtar.

Oppure si può utilizzare una chiamata di sistema, come già accennato:

system("tar -zxf /your/file.tar.gz") 
3

C'è un'eccellente biblioteca libarchive, che supporta l'accesso a più formati di archivio utilizzando l'API coerente. Puoi seguire these examples su come usarlo.

Se si utilizza Ubuntu, è possibile installare facilmente questa libreria utilizzando il comando sudo apt-get install libarchive-dev. Su altre piattaforme, potrebbe essere necessario scaricare il codice sorgente e compilare questa libreria da soli.

Uno dei vantaggi dell'utilizzo di libarchive rispetto all'utilizzo delle chiamate system() non dipende dalle utilità di sistema, e dovrebbe anche funzionare più velocemente perché non si biforca.

+0

libarchive è per c non C++. – user60627

+3

@ user60627: cosa ti impedisce di usare la libreria C nel programma C++? Errore – mvp

+0

: una classe di memoria può essere specificata solo per oggetti e funzioni. Ho usato i blocchi di codice e funziona solo in c. – user60627