Xcode libzipをXcodeで使う(C++)

目次

はじめに

C++zipアーカイブの展開を行うためにlibzipを導入する

NiH: libzip

wxWidgetsでなぜかエントリの名前が空文字になってしまうアーカイブが存在したため。

解決しました: wxWidgets wxZipInputStreamでエンコーディングの自動判別ができる - ikap

libzipでは取得できた。

Xcodeで使いたい


libzipの導入

homebrewで行った。

brew install libzip

これでOK


Xcodeへの導入

Xcodeのプロジェクト設定を開き、Build Settingsに項目を追加する。

  • Other Linker Flagsに1つ追加
    • -lzip
  • Other C++ Flagsに2つ追加
    • -I/usr/local/Cellar/libzip/1.1.2/include
    • -I/usr/local/Cellar/libzip/1.1.2/lib/libzip/include

パスは適宜置き換えてください。探すときは、linkerc++ flなどで検索すれば良いと思います。

これでインクルードもビルドもできました。

NiH: libzip: libzip(3)がドキュメントみたいです。


コード例

#include <iostream>
#include <zip.h>

using namespace std;

string zipfile = "some_zipfile_path";
int err = 0;
zip *z = zip_open(zipfile.c_str(), 0, &err);
cout << "err?: " << err << endl;

int num = zip_get_num_files(z);
cout << "num: " << num << endl;

for (int i = 0; i < num; i++) {
    struct zip_stat zs;
    zip_stat_index(z, i, 0, &zs);
    cout << "entry i: " << i << ", name: " << zs.name << endl;
}
タイトルとURLをコピーしました