2014-07-03 9 views
6

In meinem Linux-Programm entpacken, ich möchte eine tar.gz-Datei Inhalt in ein bestimmtes Verzeichnis entpacken. Gibt es in C/C++ einen Systemaufruf oder eine C++ - Klasse, um Dateiinhalte aus der tar.gz-Datei zu extrahieren?wie kann ich tar.gz-Datei mit C++ Programm

+1

[tar] (http://stackoverflow.com/questions/4812837/c-library-to-make-tar-files) und [gz] (http://stackoverflow.com/questions/624250/how- do-i-Lese-Schreib-gzip-Dateien) – Unda

+0

möglich Duplikat [Wie eine .gz-Datei Zeile-für-Zeile in C++ lesen?] (http://stackoverflow.com/questions/3201538/how-to- read-a-gz-Datei-Zeile-für-Zeile-in-c) – bobah

+0

@bobah: Dies ist kein Duplikat. verknüpfte Frage spricht über einzelne .gz-Datei, während dies über .tar.gz-Archiv mit vielen Dateien darin ist – mvp

Antwort

0

Wenn Sie <cstdlib> enthalten können Sie anrufen:

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

Ich kenne diesen Aufruf von System(). Ich habe in meinem Programm nacheinander 3 mal für verschiedene tar.gz-Dateien verwendet, aber das Programm wurde abgestürzt, nachdem die 3 mit Stack-Angabe ausgeführt wurde. Da der Aufruf von system() den Befehl als untergeordneten Prozess oder anderen Prozess ausführt. Beim aufeinanderfolgenden Aufruf stürzt der Stapel ab. – user3793746

+0

hast du einen Absturzbericht erhalten? – PinkFloyd

0

Sie mehrere Libs wie libtar verwenden können.

Oder Sie können einen Systemaufruf verwenden, wie Sie bereits erwähnt:

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

Es gibt ausgezeichnete Bibliothek libarchive, die den Zugriff auf mehrere Archivformate unter Verwendung einer konsistenten API unterstützt. Sie können these examples folgen, wie es zu benutzen.

Wenn Sie auf Ubuntu sind, können Sie einfach diese Bibliothek installieren Befehl sudo apt-get install libarchive-dev. Auf anderen Plattformen müssen Sie möglicherweise Quellcode herunterladen und diese Bibliothek selbst kompilieren.

Ein Vorteil der Verwendung von libarchive im Vergleich zu system() Aufrufe ist nicht von Systemdienstprogrammen abhängig, und es sollte auch schneller arbeiten, weil es nicht verzweigt.

+0

libarchive ist für c nicht C++. – user60627

+3

@ user60627: Was hält Sie davon ab, C-Bibliothek in C++ - Programm zu verwenden? – mvp

+0

Fehler: Eine Speicherklasse kann nur für Objekte und Funktionen angegeben werden. Ich habe Codeblocks und funktioniert nur in c. – user60627

Verwandte Themen