SSZipArchiveは、公式デモアドレスhttps://github.com/ZipArchive/ZipArchiveを解凍します。
次の記事は、デモを見ているときの解凍機能を主に記録しています
1.圧縮
_zipPath = [self tempZipPath];
- (NSString *)tempZipPath {
NSString *path = [NSString stringWithFormat:@"%@/%@.zip",
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0],
[NSUUID UUID].UUIDString];
return path;
}
NSLog(@"Zip path: %@", _zipPath);
打印结果:Zip path: /Users/admin/Library/Developer/CoreSimulator/Devices/3E9F0B21-D9F9-4CB0-B9DC-DC7BEDC3DBFB/data/Containers/Data/Application/CE1DD483-E455-48C1-873F-4D83EE74920B/Library/Caches/3DCF2C1C-1C72-499F-AB28-C7F240B5FA09.zip
Zipパスが「サンドボックスパスと[NSUUIDUUID] .UUIDString]で構成されていることがわかります。/ Users / admin /.../ Library / Caches部分はサンドボックスパスであり、 後者の部分はUUIDです。同時に、サンドボックス内のよく言われるサンドボックスディレクトリ構造も見ました
(1)/AppName.appアプリケーション自体を含むアプリケーションのパッケージディレクトリ。アプリケーションは署名されている必要があるため、このディレクトリの内容を実行時に変更することはできません。変更しないと、アプリケーションを起動できません。
(2)/ Documents /アプリケーションの重要なデータファイルとユーザーデータファイルを保存します。ユーザーデータは基本的にこの場所に配置され(たとえば、インターネットからダウンロードした写真や音楽ファイル)、このフォルダーはアプリケーションの更新時に自動的にバックアップされ、その中のデータはiTunesに接続すると自動的に同期できます。
(3)/ Libraryディレクトリ:このディレクトリの下には2つのサブディレクトリがあります
。サブフォルダを作成できます。バックアップしたいがユーザーには見られたくないデータを保存するために使用できます。キャッシュを除く、このパスの下にあるすべてのフォルダは、iTunesによってバックアップされます
- / Library / Caches(Caches)アプリケーションの使用時に生成されたサポートファイルとキャッシュファイルを保存し(アプリケーションの再起動プロセスで必要な情報を保存します)、ログファイルはこのディレクトリに配置するのが最適です。このディレクトリはiTunesの同期中にバックアップされず、その中のデータは他のツールによってクリーンアップされる可能性があります。
- / Library / Preferences(Preferences)は、アプリケーション設定ファイル(NSUserDefaults(これはこれです)タイプの設定を使用するときに作成されます。手動で作成しないでください。iTunesでもバックアップでき、アプリケーションが更新されると自動的にバックアップされます。plistファイルはここに置いてください)。
(4)/ tmp /は、アプリケーションの実行時に必要な一時データを保存します。このパスのファイルは、iTunesによってバックアップされません。iphoneが再起動すると、このディレクトリ内のすべてのファイルが自動的にクリアされます。たとえば、ビデオの録画後、/ temp /に配置されます。したがって、ビデオファイルはこのフォルダからアルバムに転送する必要があります。そうしないと、ビデオファイルがシステムによってクリーンアップされます。
。
BOOL success = [SSZipArchive createZipFileAtPath:_zipPath
withContentsOfDirectory:_samplePath
keepParentDirectory:NO
compressionLevel:-1
password:password.length > 0 ? password : nil
AES:YES
progressHandler:nil];
2.解凍します
- (IBAction)unzipPressed:(id)sender {
if (!_zipPath) {
return;
}
NSString *unzipPath = [self tempUnzipPath];
NSLog(@"Unzip path: %@", unzipPath);
//打印结果:/Users/admin/Library/Developer/CoreSimulator/Devices/3E9F0B21-D9F9-4CB0-B9DC-DC7BEDC3DBFB/data/Containers/Data/Application/CE1DD483-E455-48C1-873F-4D83EE74920B/Library/Caches/77817AD7-9086-456B-835A-42EEE2461B7D
//新创建了一个“77817AD7-9086-456B-835A-42EEE2461B7D”的文件路径
if (!unzipPath) {
return;
}
NSString *password = _passwordField.text;
BOOL success = [SSZipArchive unzipFileAtPath:_zipPath
toDestination:unzipPath
preserveAttributes:YES
overwrite:YES
nestedZipLevel:0
password:password.length > 0 ? password : nil
error:nil
delegate:nil
progressHandler:nil
completionHandler:nil];
}
- (NSString *)tempUnzipPath {
NSString *path = [NSString stringWithFormat:@"%@/%@",
NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0],
[NSUUID UUID].UUIDString];
NSURL *url = [NSURL fileURLWithPath:path];
NSError *error = nil;
[[NSFileManager defaultManager] createDirectoryAtURL:url
withIntermediateDirectories:YES
attributes:nil
error:&error];
if (error) {
return nil;
}
return url.path;
}