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 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。