gzip による Deflate 圧縮データを解凍する
SFXZIPDecoder クラスを利用して、ストレージ クラスや SFBSource 、SFBAStream に格納された gzip による Deflate 圧縮データを解凍します。
// コールバックを使うため、SFXZIPDecoder のインスタンスはクラスのメンバ変数にする class MyClass { private: SFXFile _file; // ファイル クラス のインスタンス SFXZIPDecoder _decoder; // SFXZIPDecoder クラスのインスタンス SFXAnsiStringStreamReader _reader; // 読み込み用ストリーム SFXAnsiString _unzipString; // 解凍後の文字列 public: Void Start(Void); // コールバック関数 CALLBACK_DECLARE_SFXANSISTRINGSTREAMREADER(OnFetch) }; Void MyClass::Start(Void) { SFCError error; // エラー // 読み書きモードでファイルを開く if ((error = _file.OpenReadOnly(SFXPath("/testdata.tar.gz"))) == SFERR_NO_ERROR) { // ストレージ ( ファイル ) をデコーダに登録する if ((error = _decoder.Open(_file)) == SFERR_NO_ERROR) { // デコーダから読み込み用ストリームを取得する if ((error = _decoder.GetStreamReader(&_reader)) == SFERR_NO_ERROR) { // フェッチする if ((error = _reader.Fetch(CALLBACK_FUNCTION(OnFetch))) != SFERR_NO_ERROR) { // エラーのとき _reader.Release(); } } if (error != SFERR_NO_ERROR) { // エラーのとき _decoder.Close(); } } if (error != SFERR_NO_ERROR) { // エラーのとき _file.Close(); } } } // フェッチが完了したときに呼び出されるコールバック関数 CALLBACK_IMPLEMENT_SFXANSISTRINGSTREAMREADER(MyClass, OnFetch, error) { if (error == SFERR_NO_ERROR) { // エラーが発生していないとき // 解凍したデータを _unzipString 変数に読み込む if ((error = _reader.ReadSFXAnsiString(&_unzipString)) == SFERR_NO_ERROR) { // 文字列を表示する TRACE("%s", _unzipString.GetCString()); } } // 終了処理 _decoder.Close(); _file.Close(); }