ziparchive を使って ZIP圧縮する(旧:Objective-Zipを使って ZIP圧縮する)

2010年8月22日日曜日 | Published in | 2 コメント

このエントリーをはてなブックマークに追加

2010-12-19 [訂正] Objective-Zip ではなく ziparchive の間違いです。
Source Checkout - ziparchive - Project Hosting on Google Code
根本的な間違いで失礼しました。


iPhoneアプリで ZIP圧縮をかけたい。探したところ Objective-Zipziparchive なるものが見つかったので使ってみた。
objective-zip - Project Hosting on Google Code
Source Checkout - ziparchive - Project Hosting on Google Code

情報など


下記のサイトが参考になった。
Compressing directory contents on the iPhone with zlib :: Post No Bills


実装など


※今回はサンプルなし

こんな感じで使う。

#import "ZipArchive.h"
 :
- (void)someMethod
{
 NSString* zipFile = @"/some/path/target.zip";
 NSArray* fileList = [NSArray arrayWithObjects:
  @"/some/data/file1.csv", @"/some/data/file2.csv", nil];

 // (1) 準備
 ZipArchive* archiver = [[ZipArchive alloc] init];
 [archiver CreateZipFile2:zipFile];

 // (2) ファイル追加(圧縮)
 for (NSString* filePath in fileList) {
  [archiver addFileToZip:filePath
          newname:[filePath lastPathComponent]];
 }
 [archiver CloseZipFile2];
 [archiver release];
}
addFileToZip:newname: の最初に引数に追加したいファイルをパス付きで指定する。2番目の引数はZIPファイル内のパス情報。例の場合、[filePath lastPathComponent] すなわちファイル名だけを渡している(file1.csv, file2.csv)。この場合、圧縮されたファイルを解凍すると次のようになる。
target.zip
 ↓解凍
 target/
   |-- file1.csv
   |-- file2.csv
トップレベルのフォルダ名は ZIPファイルの拡張子を除いた部分が使われる。

もし2番目の引数(newname:)にパス情報のついた filePathをそのまま渡すと、ZIPファイル内にはパス階層も保存される。解凍すると次のようになる。
target.zip
 ↓解凍
 some/
   |--data/
       |-- file1.csv
       |-- file2.csv

なお利用するにはフレームワークへ lib.1.2.3.dylib を追加しておく。

Responses

  1. iphone開発者 says:
    2010年12月17日 17:18

    実際使ったライブラリは紹介されたObjective-Zipではなく、ziparchiveじゃないかなと思います。
    http://code.google.com/p/ziparchive/

  2. iphone開発者 says:
    2010年12月17日 17:18

    実際使ったライブラリは紹介されたObjective-Zipではなく、ziparchiveじゃないかなと思います。
    http://code.google.com/p/ziparchive/

  3. xcatsan says:
    2010年12月19日 8:46

    こんにちは。
    指摘の通りですね。
    大ボケかましてしまいました。
    後ほど修正しておきます。

    ありがとうございました!

  4. xcatsan says:
    2010年12月19日 8:46

    こんにちは。
    指摘の通りですね。
    大ボケかましてしまいました。
    後ほど修正しておきます。

    ありがとうございました!

Leave a Response

人気の投稿(過去 30日間)