3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Swift・Objective-C】SSZipArchiveでzipの解凍・圧縮

Posted at

#使用ライブラリ
今回はSSZipArchiveというライブラリを使用して、Zipファイルの解凍・圧縮処理を行っていきます。
以下SSZipArchiveのgithubになります。
https://github.com/ZipArchive/ZipArchive

#zipの解凍
zipの解凍は解凍するZIPファイルのパスと解凍したファイルを展開するディレクトリのパスを指定する事で解凍をすることができます。

Objective-C

NSString *zipFilePath = @"解凍するZIPファイルのパス";
NSString *destinationPath = @"解凍したファイルを展開するディレクトリのパス";
BOOL isSuccess = [SSZipArchive unzipFileAtPath:zipFilePath Destination:destinationPath];

if (isSuccess) {
    // 処理が成功した場合
} else {
    // 処理が失敗した場合
}

Swift

var zipFilePath = "解凍するZIPファイルのパス"
var destinationPath = "解凍したファイルを展開するディレクトリのパス"
var isSuccess = SSZipArchive.unzipFileAtPath(zipFilePath, toDestination: destinationPath)
if (isSucces) {
  //処理が成功した場合
} else {
  //処理が失敗した場合
}

#パスワードzipの解凍
基本的にはzipの解凍と一緒ですが、パスワードzipの解凍ではデリゲートを使用するので注意が必要です。
もし以下のコードの処理で解凍に失敗した場合errorの処理が実行され、成功した場合はzipArchiveDidUnzipArchiveAtPathの処理が実行されます。ここで一つ注意なのが、zipArchiveDidUnzipArchiveAtPathはSSZipArchiveDelegateを親クラスに設定しないと使用できないので気をつけてください。

Objective-C

NSString *zipFilePath = @"解凍するZIPファイルのパス";
NSString *destinationPath = @"解凍したファイルを展開するディレクトリのパス";
NSString *password = @"パスワード";
NSError *error = nil;
[SSZipArchive unzipFileAtPath:zipFilePath toDestination:destinationPath
                    overwrite:YES password:password error:&error delegate:self];
if (error) {
    //解凍処理が失敗した場合の処理
    NSLog(@"error: %@", error);
}
//下記の関数を使用する為にSSZipArchiveDelegateを親クラスに設定する必要あり
- (void)zipArchiveDidUnzipArchiveAtPath:(NSString *)path zipInfo:(unz_global_info)zipInfo unzippedPath:(NSString *)unzippedPath {
    //解凍処理が成功した場合
    NSLog(@"解凍完了");
}

Swift

var zipFilePath = "解凍するZIPファイルのパス"
var destinationPath = "解凍したファイルを展開するディレクトリのパス"
var password = "パスワード"
var error: Error? = nil
SSZipArchive.unzipFileAtPath(zipFilePath, toDestination: destinationPath, overwrite: true, password: password, error: &error, delegate: self)

if error != nil {
    //解凍処理が失敗した場合の処理
    print("error: \(error)")
}

//下記の関数を使用する為にSSZipArchiveDelegateを親クラスに設定する必要あり
 func zipArchiveDidUnzipArchiveAtPath(path: String!, zipInfo: unz_global_info, unzippedPath: String!) {
        //解凍処理が成功した場合の処理
        print("解凍完了!");
    }
    

#zipの圧縮
圧縮したzipファイルの保存先のパスと圧縮するファイルの指定をする事で、下記のコードでzipの圧縮が可能になります。

Objective-C

NSString *zippedFilePath = @"圧縮したZIPファイルの保存先パス";

//圧縮するファイルの指定
NSArray *inputFilePaths = @[[[NSBundle mainBundle]
                             pathForResource:@"sampleImage" ofType:@"jpg"],
                            [[NSBundle mainBundle]
                             pathForResource:@"sampleText" ofType:@"txt"]];
BOOL isSuccess = [SSZipArchive createZipFileAtPath:zippedFilePath withFilesAtPaths:inputFilePaths];
if (isSuccess) {
    // 処理が成功した場合
} else {
    // 処理が失敗した場合
}

Swift

let zippedFilePath = "圧縮したZIPファイルの保存先パス";

//圧縮するファイルの指定
let inputFilePaths = [NSBundle.mainBundle().pathForResource("sampleImage", ofType: "jpg"),
    NSBundle.mainBundle().pathForResource("sampleText", ofType: "txt")];
let isSuccess = SSZipArchive.createZipFileAtPath(zippedFilePath, withFilesAtPaths: inputFilePaths);
if (isSuccess) {
    // 処理が成功した場合
} else {
    // 処理が失敗した場合
}

#参考
使用ライブラリGitHub
https://github.com/ZipArchive/ZipArchive

記事
https://qiita.com/asakahara/items/cf68f87be4f1dd116778
http://swift-salaryman.com/ssziparchive.php
https://www.flatcorp.jp/blog/memo/299.html

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?