[Mac][iOS]ZipArchive ファイルの圧縮と解凍 | Cocoa練習帳
2012-02-29 00:05:10

[Mac][iOS]ZipArchive ファイルの圧縮と解凍

テーマ:ブログ

iOSはストレージ容量もメモリも節約を求められる。また、データサイズが小さくなる事によって、操作性の向上も期待できる。

その為にキーとなる事の一つにデータの圧縮と解凍があるが、今回は、Cocoaでzipデータを扱う初歩的に事に挑戦する。


業務上パスワード付きzip圧縮ファイルを受け取る事が多いのだが、何時もこれを解凍するのをコマンドラインでおこなっていた。




$ unzip -P パスワード ファイル.zip



これをAppStore時代では存在が小さくなってしまったが、Dropletsとして実装してみよう。


Mac OS XのCocoa Applicationを新規作成し、TARGETSの設定のDocument TypesにZip文書を追加する。







アプリケーションのデリゲートに、以下のコードを追加する。




- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
    DBGMSG(@"%s, filename(%@)", __func__, filename);
    return NO;
}



これでドラッグ&ドロップされた一つのファイルのパスが取得できるようになった。


次に、ZipArchiveライブラリを以下のサイトから入手する。




http://code.google.com/p/ziparchive/


入手したZipArchiveライブラリをプロジェクトに組み込み、ZipArchive.hでUIKit.hをインクルードしているのでコメントアウトし、




ZipArchive.h




ZipArchive.mmをARCの対象から外す。




ZipArchive.mm




そして、かなり手抜きをしているが、zipファイルが渡されると、末尾の"zip"サフィクスを削るコードを先ほどのメソッドに追加する。




#import "ZipArchive.h"
        :
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
{
    ZipArchive  *archiver = [[ZipArchive alloc] init];
    [archiver UnzipOpenFile:filename];
    NSString    *path = [filename stringByDeletingPathExtension];
    [archiver UnzipFileTo:path overWrite:NO];
    [archiver UnzipCloseFile];
    return YES;
}
        :



ソースコード
GitHubからどうぞ。

 https://github.com/murakami/workbook/tree/master/mac/UnZip


関連情報
ZipArchive

An Objective C class for zip/unzip on iPhone and Mac OSX

村上幸雄さんの読者になろう

ブログの更新情報が受け取れて、アクセスが簡単になります

コメント

[コメントする]

Ameba人気のブログ

Amebaトピックス