美文网首页
2021-01-29

2021-01-29

作者: 黎先生_ | 来源:发表于2021-01-29 10:15 被阅读0次
//
//  UPHomeViewControl.m
//  UnpackPro
//
//  Created by ylb on 2021/1/27.
//

#import "UPHomeViewControl.h"
#import <SSZipArchive/SSZipArchive.h>
#import "UPRarViewControl.h"

@interface UPHomeViewControl ()

@property (weak, nonatomic) IBOutlet UITextField *pwd_txt;
@property (weak, nonatomic) IBOutlet UILabel *lab1;
@property (weak, nonatomic) IBOutlet UILabel *lab2;
@property (weak, nonatomic) IBOutlet UILabel *lab3;

@property (nonatomic,strong)NSString *zipPath;

@end

@implementation UPHomeViewControl

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.title = @"ZIP";
    
    [self addNavigationItemWithTitles:@[@"RAR"] isLeft:NO target:self action:@selector(rightClick) tags:nil withTextColor:TYPEFACE_COLOR];
    
}
-(void)rightClick
{
    [self.navigationController pushViewController:[UPRarViewControl new] animated:YES];
}

#pragma mark - 压缩
- (IBAction)zipClick:(id)sender {
    
    NSString *filePath = [[NSBundle mainBundle].bundleURL
                   URLByAppendingPathComponent:@"说明"
                   isDirectory:YES].path;
    NSLog(@"zip path: %@", filePath);
    
    _zipPath = [self tempZipPath];
    
    NSString *password = _pwd_txt.text;
    BOOL success = [SSZipArchive createZipFileAtPath:_zipPath
                             withContentsOfDirectory:filePath
                                 keepParentDirectory:NO
                                    compressionLevel:-1
                                            password:password.length > 0 ? password : nil
                                                 AES:YES
                                     progressHandler:^(NSUInteger entryNumber, NSUInteger total) {
        
    }];
    if (success) {
        NSLog(@"Success zip");
        [self prompt: @"压缩成功"];
    } else {
        NSLog(@"No success zip");
        [self prompt: @"压缩失败"];
    }
}
#pragma mark - 解压
- (IBAction)unzipClick:(id)sender {
    

    if (!_zipPath) {
        return;
    }
    NSString *unzipPath = [self tempUnzipPath];
    NSLog(@"Unzip path: %@", unzipPath);
    if (!unzipPath) {
        return;
    }
    NSString *password = _pwd_txt.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:^(NSString * _Nonnull path, BOOL succeeded, NSError * _Nullable error) {
        
    }];
    if (success) {
        NSLog(@"Success unzip");
        [self prompt: @"解压成功"];
    } else {
        NSLog(@"No success unzip");
        [self prompt: @"解压失败"];
        return;
    }
    NSError *error = nil;
    NSMutableArray<NSString *> *items = [[[NSFileManager defaultManager]
                                          contentsOfDirectoryAtPath:unzipPath
                                          error:&error] mutableCopy];
    if (error) {
        return;
    }
    [items enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        switch (idx) {
            case 0: {
                self.lab1.text = obj;
                break;
            }
            case 1: {
                self.lab2.text = obj;
                break;
            }
            case 2: {
                self.lab3.text = obj;
                break;
            }
            default: {
                NSLog(@"Went beyond index of assumed files");
                break;
            }
        }
    }];
}

#pragma mark - Private
- (NSString *)tempZipPath {
    NSString *path = [NSString stringWithFormat:@"%@/%@.zip",
                      NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0],
                      [NSUUID UUID].UUIDString];
    return path;
}
- (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;
}
@end
//
//  UPRarViewControl.m
//  UnpackPro
//
//  Created by ylb on 2021/1/27.
//

#import "UPRarViewControl.h"
#import <UnrarKit.h>

@interface UPRarViewControl ()

@property (weak, nonatomic) IBOutlet UITextField *pwd_txt;

@end

@implementation UPRarViewControl

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"RAR";
}

/** 解压 */
- (IBAction)rarClick:(id)sender {
    
//    //获取Document路径
//    NSArray *documentsPathArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    NSString *documentsPath = [documentsPathArr lastObject];
//    //拼接上文件
//    NSString *fileString = [NSString stringWithFormat:@"Announcement/%@",self.rarFileName];
    
    // 拼接要写入文件的路径
//    NSString *path = [documentsPath stringByAppendingPathComponent:fileString];
    
    NSString *filePath = [[NSBundle mainBundle].bundleURL
                   URLByAppendingPathComponent:@"Mobile - PNG.rar"
                   isDirectory:YES].path;
    NSLog(@"zip path: %@", filePath);
    
    
    
    
    //文件路径
    NSError *archiveError = nil;
    URKArchive *archive = [[URKArchive alloc] initWithPath:filePath error:&archiveError];
    if (!archive) {
        UIAlertController *controller = [UIAlertController alertControllerWithTitle:@"提示"
                                                                            message:@"解压失败,请重试!"
                                                                     preferredStyle:UIAlertControllerStyleAlert];
        [controller addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]];
        [self presentViewController:controller animated:YES completion:nil];
        return;
    }
    NSError *error = nil;
    NSArray *filenames = [archive listFilenames:&error];
    
    if (error) {
        [self prompt:@"解压失败"];
        return;
    }
    for (NSString *filename in filenames) {
        NSLog(@"File: %@", filename);//打印文件名称
    }
    NSData *data = [archive extractDataFromFile:filenames[0] progress:^(CGFloat percentDecompressed) {
        NSLog(@"");
    } error:&error];
    
    
    
    
    if (error) {
        [self prompt:@"解压失败"];
        if (error.code == ERAR_MISSING_PASSWORD) {
        }
    }
    if (data != nil) {
        //解压后的文件操作可以在这里进行处理,比如保存或者显示处理都可以
        // 获取路径
        NSString *doc = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
        // 拼接文件路径

        NSString *path = [doc stringByAppendingPathComponent:[NSString stringWithFormat:@"AnnouncementData/%@",filenames[0]]];
        BOOL isSuccess = [data writeToFile:path atomically:YES];//存储
        if (isSuccess) {
            [self prompt:@"写入成功"];
        } else {
            [self prompt:@"写入失败"];
        }
    }

}



@end

相关文章

网友评论

      本文标题:2021-01-29

      本文链接:https://www.haomeiwen.com/subject/huqqtltx.html