2014-07-03 23 views
6

kullanarak tar.gz dosyasını nasıl açabilirim linux programımda tar.gz dosya içeriğini belirli bir dizine sıkıştırmak istiyorum. Tar.gz dosyasından dosya içeriğini ayıklamak için C/C++ 'da herhangi bir sistem çağrısı veya C++ sınıfı var mı? Eğer <cstdlib> eklersenizC++ programı

+1

[tar] (http://stackoverflow.com/questions/4812837/c-library-to-make-tar-files) ve [gz] (http://stackoverflow.com/questions/624250/how- do-i-okuma-yazma-gzip-dosyaları) – Unda

+0

olası bir kopyası [C++ dosyasında .gz dosyası nasıl okunur?] (http://stackoverflow.com/questions/3201538/how-to- read-a-gz-dosya-satır-in-line-in-c) – bobah

+0

@bobah: Bu bir kopya değil. tek bir .gz dosyası hakkında bağlantılı soru konuşur, bu bir çok dosya ile .tar.gz arşivi bu dosyada ( – mvp

cevap

0

Arayabileceğin: Sen libtar gibi çeşitli kütüphanelerini kullanabilirsiniz

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

) Bu sistem() çağrısının farkında. Farklı tar.gz dosyaları için programımı art arda 3 kez kullandım, ancak program 3'ü yığın göstergesiyle çalıştırdıktan sonra çöktü. System() çağrısı, komutu bir alt işlem veya başka bir işlem olarak çalıştırdığından. Ardı ardına arayarak, yığın çöktü. – user3793746

+0

herhangi bir kilitlenme raporu aldınız mı? – PinkFloyd

0

.

Yoksa zaten bahsedildiği gibi bir sistem çağrısı kullanabilirsiniz:

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

Mükemmel kütüphane var Tutarlı API kullanarak çoklu arşiv formatlarına erişmeyi destekleyen. Nasıl kullanılacağı hakkında these examples'u takip edebilirsiniz.

Ubuntu'daysanız, bu kitaplığı sudo apt-get install libarchive-dev komutunu kullanarak kolayca yükleyebilirsiniz. Diğer platformlarda, kaynak kodunu indirmeniz ve bu kütüphaneyi kendiniz derlemeniz gerekebilir.

system() çağrılarını kullanarak libarchive kullanmanın bir avantajı sistem yardımcı programlarına bağlı değildir ve aynı zamanda daha hızlı çalışmalıdır çünkü çatallanmadığı için.

+0

libarchive, c değil C++ içindir. – user60627

+3

@ user60627: C++ programında C kütüphanesini kullanmanız sizi ne engeller? – mvp

+0

hatası: Bir depolama sınıfı yalnızca nesneler ve işlevler için belirtilebilir. Kod bloklarını kullandım ve yalnızca c'de çalışır. – user60627