http://people.freebsd.org/~kientzle/libarchive/
ふむふむ。
#include <iostream> #include <string> #include <archive.h> #include <archive_entry.h> using namespace std; namespace { void list(string filename) { archive *a = archive_read_new(); archive_read_support_compression_all(a); archive_read_support_format_all(a); archive_read_open_filename(a, filename.c_str(), 10240); archive_entry *entry; int r; while ((r = archive_read_next_header(a, &entry)) == ARCHIVE_OK) { cout << filename << ":" << archive_entry_pathname(entry) << endl; } archive_read_finish(a); } } int main() { list("C:\\libarchive-2.5.904a.zip"); list("C:\\libarchive-2.5.904a.tar.gz"); list("C:\\libarchive-2.5.904a.tar.bz2"); return 0; }
C++で使うんだったら、*aをメンバ変数にもつクラスを定義した方がよいかも。