SSZipArchive descompacte o endereço de demonstração oficial https://github.com/ZipArchive/ZipArchive
O artigo a seguir registra principalmente a função de descompressão ao assistir a demonstração
1. Compressão
_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
Você pode ver que o caminho Zip "consiste no caminho da sandbox e [NSUUID UUID] .UUIDString]". A parte /Users/admin/.../Library/Caches é o caminho da sandbox e a última parte é o UUID. Ao mesmo tempo, também vi a frequentemente referida estrutura de diretório sandbox na sandbox
(1) /AppName.app O diretório do pacote do aplicativo, incluindo o próprio aplicativo. Como o aplicativo deve ser assinado, o conteúdo deste diretório não pode ser modificado em tempo de execução, caso contrário, o aplicativo não pode ser iniciado.
(2) / Documentos / Salvar arquivos de dados importantes e arquivos de dados do usuário do aplicativo. Os dados do usuário são basicamente colocados neste local (como fotos ou arquivos de música baixados da Internet). Esta pasta será copiada automaticamente quando o aplicativo for atualizado e os dados contidos nela também podem ser sincronizados automaticamente quando conectado ao iTunes.
(3) Diretório / Biblioteca: Existem dois subdiretórios neste diretório: subpastas
podem ser criadas. Ele pode ser usado para armazenar dados dos quais você deseja fazer backup, mas não deseja que sejam vistos pelos usuários. Todas as pastas sob este caminho, exceto Caches, serão copiadas pelo iTunes
- / Library / Caches (Caches) Salve os arquivos de suporte e arquivos de cache gerados quando o aplicativo é usado (salve as informações necessárias no processo de reinicialização do aplicativo) e os arquivos de log são mais bem colocados neste diretório. Não será feito backup deste diretório durante a sincronização do iTunes e os dados nele contidos podem ser limpos por outras ferramentas.
- / Library / Preferences (Preferences) salva o arquivo de preferências do aplicativo (criado ao usar NSUserDefaults (este é) tipo de configurações, não deve ser criado manualmente; mesmo o iTunes pode ser feito backup, e será feito automaticamente quando o aplicativo for atualizado; o arquivo plist é apenas Coloque aqui).
(4) / tmp / salva os dados temporários necessários quando o aplicativo está em execução.Os arquivos neste caminho não serão copiados pelo iTunes. Quando o iphone reiniciar, ele apagará automaticamente todos os arquivos neste diretório; por exemplo, após gravar o vídeo, ele é colocado em / temp /; portanto, os arquivos de vídeo devem ser transferidos desta pasta para o álbum, caso contrário, os arquivos de vídeo serão limpos pelo sistema
.
BOOL success = [SSZipArchive createZipFileAtPath:_zipPath
withContentsOfDirectory:_samplePath
keepParentDirectory:NO
compressionLevel:-1
password:password.length > 0 ? password : nil
AES:YES
progressHandler:nil];
2. Descompacte
- (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;
}