11213


下記ソースコードでメソッドから[minizip](https://github.com/nmoinvaz/minizip)のunzip.cにある  
unzOpen2メソッドをバイトデータを解凍したところ、  
圧縮前のサイズと一致している事はunz64local_GetCurrentFileInfoInternalメソッドの  
file_info.uncompressed_sizeで確認できたのですが  
解析しても解凍後のデータがどこに保存されているのかわからず悩んでおります。

ZipFormatのように、特定のビットにデータが格納されるのでしょうか？  
<http://ja.wikipedia.org/wiki/ZIP_%28%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%29>  
  
開発環境：MacOSX 10.10.3、xCode6.3.2、Objective-c

[code]

    void uncompressByGzip(const char** ptrSrc, const int srcLength)
    {
        unz64_s unz64data;
        unzFile unzfiledata;
    
        unsigned long long int readdatasize;
    
        zlib_filefunc_def filefunc32 = {0};
        ourmemory_t unzmem = {0};
    
        unzmem.size = srcLength;
        unzmem.base = (char *)malloc(unzmem.size);
        memcpy(unzmem.base, ptrSrc, unzmem.size);
    
        fill_memory_filefunc(&filefunc32, &unzmem);
        unzfiledata = unzOpen2("__notused__", &filefunc32);
    
    }
    
[/code]


CC BY-SA 3.0
2015-06-08T16:03:24.550
11132
2015-07-15T01:05:22.520
5261
question
objective-c c++
minizipで解凍した実体がどこにあるのかわかりません。


unzOpen2()を実行しただけでは解凍できません。  
minizipでzip内のファイルを解凍するには以下の手順が必要です。

(1) zipファイルをオープンする。

[code]

    unzfiledata = unzOpen2(...)
    
[/code]

(2) zip 内の解凍したいファイルPATHを指定する。

[code]

    unzLocateFile(unzfiledata, ...)
    
[/code]

zip内に1ファイルしかない場合は、

[code]

    unzGoToFirstFile(unzfiledata)
    
[/code]

(3) (2)で指定したzip内のファイルをオープンする

[code]

    unzOpenCurrentFile(unzfiledata)
    
[/code]

(4) (3)でオープンしたzip内のファイルを読取バッファに読み込む

[code]

    unzReadCurrentFile(unzfiledata, ...)
    
[/code]

(5) (3)でオープンしたzip内のファイルをクローズする。

[code]

    unzCloseCurrentFile(unzfiledata)
    
[/code]

※zip内の複数ファイルを読みたい場合は(2)～(5)を取得するzip内のファイル数分繰り返す。

(6) (1)でオープンしたzipファイルをクローズする。

[code]

    unzClose(unzfiledata)
    
[/code]

※zipは複数ファイルを格納可能なためzip内のどのファイルを処理対象とするか(この質問の場合は読み込みたいか)を指定する必要があります。


CC BY-SA 3.0
2015-06-10T08:03:48.057
11213
2015-07-15T01:05:22.520
2015-07-15T01:05:22.520
7343
7343
11132
answer