Objective-Zipは、現在最も普及しているであろう圧縮形式であるZipの圧縮と解凍を行うことができるObjective-Cのライブラリであり、ZLib
とMinizipという2つのライブラリを用いています。そのため、Objective-Zip自体は新BSDライセンスですが、ZLibとMiniZipはライセンスが異なる (zlibライセンス) ので注意してください。
Objective-Zipの現時点での最新バージョンである0.7.2は、iOSのバージョン3.1.2から4.2で利用可能です。この記事ではObjective-Zipを用いたZipファイルの操作を簡単に説明します。
事前準備
Xcodeで次の手順を行います。ちなみに、手元の環境ではzlibのライブラリは不要でした。なお、Minizipはzlibを利用してZipファイルの圧縮と解凍を行うライブラリです (zlibはgzipファイルを解凍できるが、zipファイルには対応していない)。
- Objective-Zip-0.7.2.zipをダウンロード
- Objective-Zip-0.7.2.zipを解凍し、MiniZipとObjective-ZipをDocumentsフォルダに移動
- [Add]→[Existing Files...]でMiniZipとObjective-Zipを追加
- [Add]→[Existing Frameworks...]でlibz*.dylibを追加 (libz.1.2.3.dylibのみを追加した)
ファイル一覧表示
Zipファイル内の一覧を表示するコードを次に示します。
ZipFile* zip = [[ZipFile alloc] initWithFileName:zipfilePath mode:ZipFileModeUnzip]; NSArray* array = [zip listFileInZipInfos]; for (FileInZipInfo* i in array) { NSLog(@"%@ %@", i.name, i.length); } [zip close]; [zip release];
ファイル解凍
Zipファイル内から指定したファイルをひとつ解凍するコードを次に示します。zipInfo.sizeは圧縮時のサイズなので間違えないようにしてください。また、全部解凍するときはgoToNextFileInZipを利用したほうがよいでしょう。
ZipFile* zip = [[ZipFile alloc] initWithFileName:zipfilePath mode:ZipFileModeUnzip]; if ([zip locateFileInZip:zipInfo.name]) { ZipReadStream* read = [zip readCurrentFileInZip]; NSMutableData* data = [[NSMutableData alloc] initWithLength:zipInfo.length]; if ([read readDataWithBuffer:data]) { [data writeToFile:outputPath atomically:YES]; } [read finishedReading]; [data release]; } [zip close]; [zip release];
ファイル圧縮
Zipファイルを作成し、ファイルをひとつ追加するコードを次に示します。複数のファイルを追加する場合には余分にインデントしている4行の部分を繰り返します。なお、closeを忘れると書庫が壊れてしまうようですので注意してください。
ZipFile* zip = [[ZipFile alloc] initWithFileName:zipfilePath mode:ZipFileModeCreate]; ZipWriteStream* write = [zip writeFileInZipWithName:[path lastPathComponent] compressionLevel:ZipCompressionLevelBest]; NSData* data = [NSData dataWithContentsOfFile:path]; [write writeData:data]; [write finishedWriting]; [zip close]; [zip release];
まとめ
Objective-Zipを用いたZipファイルの操作を説明しました。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。