Gitrend
📦

マジかよ!libarchiveでアーカイブが神に!

C 2026/2/18
Summary
皆さん、ファイルアーカイブ、面倒じゃないですか? libarchiveは、そんな悩みを一瞬で吹き飛ばす魔法のライブラリなんです! マルチフォーマット対応で、もうこれなしじゃ考えられないっすね!

概要:なにこれ凄い?

うおおおお!今回紹介するのはlibarchive/libarchive! C言語製のアーカイブ・圧縮ライブラリなんだけど、正直、これを知らないなんて人生損してるレベル! tar、zip、rar、7z…もう何でもござれ! 単一のAPIでこれだけ多くの形式を扱えるって、エンジニア的には感動モノだよね! 低レベルでゴリゴリ書きたい僕みたいな変態にはたまらないし、パフォーマンスも段違いなんだ!

ここが推し!

サクッと試そう(使用例)

#include <archive.h>
#include <archive_entry.h>
#include <stdio.h>

// シンプルなアーカイブ展開シミュレーションの例だよ!
// 実際にはエラーハンドリングやファイルの書き出し処理が必要になるからね!
int extract_archive_simple(const char *filename) {
    struct archive *a;
    struct archive_entry *entry;
    int r;

    a = archive_read_new();
    archive_read_support_filter_all(a); // 全ての圧縮フィルターをサポート
    archive_read_support_format_all(a); // 全てのアーカイブフォーマットをサポート

    if ((r = archive_read_open_filename(a, filename, 10240)) != ARCHIVE_OK) {
        fprintf(stderr, "Error opening archive: %s\n", archive_error_string(a));
        return 1;
    }

    printf("Archive '%s' opened! Listing contents:\n", filename);
    while (archive_read_next_header(a, &entry) == ARCHIVE_OK) {
        printf("  - %s\n", archive_entry_pathname(entry));
        // ここでarchive_read_data_blockなどを使い、ファイルコンテンツを読み出して処理する
        archive_read_data_skip(a); // 今回はデータを読み飛ばすだけ!
    }

    archive_read_close(a);
    archive_read_free(a);
    printf("\nDone with archive operations!\n");
    return 0;
}

int main(int argc, char *argv[]) {
    if (argc < 2) {
        fprintf(stderr, "Usage: %s <archive_file>\n", argv[0]);
        return 1;
    }
    return extract_archive_simple(argv[1]);
}

これで、まず手元のアーカイブファイルを読み込んでみてほしい! gcc your_program.c -larchive -o your_program でコンパイルして ./your_program your_archive.zip みたいに実行するだけだよ!

ぶっちゃけ誰向け?

まとめ

いやー、今回もアツいライブラリを紹介しちゃったね! libarchiveはまさに縁の下の力持ちって感じで、これからの開発で絶対助けられる場面がくるはず。僕ももっと深掘りして、色々な活用法を試してみたいってウズウズしてるよ! みんなもぜひ使ってみて、その感動を味わってほしいな! じゃあまたねー!