更新时间:2022-07-04 13:57:05
ZipArchive 只能对 zip 类文件进行压缩和解压缩
GitHub 网址:https://github.com/ZipArchive/ZipArchive
ZipArchive 使用 ARC
添加 ZipArchive
// 添加第三方库文件
ZipArchive
// 包含系统动态库
libz.tbd (libz.dylib)
// 包含头文件
#import "ZipArchive.h"
ZipArchive 压缩
文件压缩
// 目标路径
NSString *destinationFilePath = @"/Users/JHQ0228/Desktop/test.zip";
// 源路径,待压缩的文件
NSArray *resourcesFilePaths = @[@"/Users/JHQ0228/Desktop/test1.rtf",
@"/Users/JHQ0228/Desktop/test2.rtf"];
BOOL result = [SSZipArchive createZipFileAtPath:destinationFilePath
withFilesAtPaths:resourcesFilePaths];
文件夹压缩
// 目标路径
NSString *destinationFilePath = @"/Users/JHQ0228/Desktop/test.zip";
// 源路径,待压缩的文件夹
NSString *resourcesDirPath = @"/Users/JHQ0228/Desktop/test";
BOOL result = [SSZipArchive createZipFileAtPath:destinationFilePath
withContentsOfDirectory:resourcesDirPath];
ZipArchive 解压缩
普通解压
// 源路径,待解压缩的文件
NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";
// 目标路径
NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";
BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath
toDestination:destinationDirPath];
密码解压
// 源路径,待解压缩的文件
NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";
// 目标路径
NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";
BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath
toDestination:destinationDirPath
overwrite:YES
password:@"password"
error:nil];
协议解压
// 源路径,待解压缩的文件
NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";
// 目标路径
NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";
BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath
toDestination:destinationDirPath
delegate:self];
协议密码解压
// 源路径,待解压缩的文件
NSString *resourcesFilePath = @"/Users/JHQ0228/Desktop/test.zip";
// 目标路径
NSString *destinationDirPath = @"/Users/JHQ0228/Desktop/test";
BOOL result = [SSZipArchive unzipFileAtPath:resourcesFilePath
toDestination:destinationDirPath
overwrite:YES
password:@"password"
error:NULL
delegate:self];
协议方法
- (void)zipArchiveProgressEvent:(unsigned long long)loaded total:(unsigned long long)total {
NSLog(@"%f", (float)loaded/total);
}
SARUnArchiveANY 可以对 .zip, .rar, .7z 类文件进行压缩和解压缩。
SARUnArchiveANY 使用 ARC
添加 SARUnArchiveANY
// 添加第三方库文件
SARUnArchiveANY
// 包含系统动态库
libz.tbd (libz.dylib)
// 包含头文件
#import "SARUnArchiveANY.h"
#import "LZMAExtractor.h"
SARUnArchiveANY 解压缩
- (void)unZip {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Zip_Example" ofType:@"zip"];
NSString *destPath = [self applicationDocumentsDirectory];
[self unArchive:filePath andPassword:nil destinationPath:destPath];
}
- (void)unRar {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"example" ofType:@"rar"];
NSString *destPath = [self applicationDocumentsDirectory];
[self unArchive:filePath andPassword:nil destinationPath:destPath];
}
- (void)unZip_pwd {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Zip_Example_pwd" ofType:@"zip"];
NSString *destPath = [self applicationDocumentsDirectory];
[self unArchive:filePath andPassword:@"SARUnArchiveANY_ZIP" destinationPath:destPath];
}
- (void)unRar_pwd {
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"example_pwd" ofType:@"rar"];
NSString *destPath = [self applicationDocumentsDirectory];
[self unArchive:filePath andPassword:@"SARUnArchiveANY_RAR" destinationPath:destPath];
}
- (void)Unzip7z {
NSString *archiveFilename = @"example.7z";
NSString *archiveResPath = [[NSBundle mainBundle] pathForResource:archiveFilename ofType:nil];
NSAssert(archiveResPath, @"can't find .7z file");
NSString *destPath = [self applicationDocumentsDirectory];
[self unArchive:archiveResPath andPassword:nil destinationPath:destPath];
}
- (void)unArchive: (NSString *)filePath andPassword:(NSString*)password destinationPath:(NSString *)destPath {
NSAssert(filePath, @"can't find filePath");
SARUnArchiveANY *unarchive = [[SARUnArchiveANY alloc] initWithPath:filePath];
if (password != nil && password.length > 0) {
unarchive.password = password;
}
if (destPath != nil) {
// (Optional). If it is not given, then the file is unarchived in the same location of its archive/file.
unarchive.destinationPath = destPath;
}
unarchive.completionBlock = ^(NSArray *filePaths) {
NSLog(@"For Archive : %@", filePath);
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"US Presidents://"]]) {
NSLog(@"US Presidents app is installed.");
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"US Presidents://"]];
}
for (NSString *filename in filePaths) {
NSLog(@"File: %@", filename);
}
};
unarchive.failureBlock = ^(){
NSLog(@"Cannot be unarchived");
};
[unarchive decompress];
}
- (void)handleFileFromURL:(NSString *)filePath {
NSLog(@"********* FILES FROM THE OTHER APPS *********");
[self unArchive:filePath andPassword:nil destinationPath:nil];
}
- (NSString *) applicationDocumentsDirectory {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
return basePath;
}