【源码】iOS开发 - 清除缓存

//

//  WBClearCacheTool.m

//  buybuyART

//

//  Created by wangbin on 2018/1/26.

//  Copyright © 2018年 ArtAlly Information Technology Co., Ltd. All rights reserved.

//

 

#import "WBClearCacheTool.h"

#define fileManager [NSFileManager defaultManager]

@implementation WBClearCacheTool

//获取path路径下文件夹大小

+ (NSString *)getCacheSizeWithFilePath:(NSString *)path

{

//调试

#ifdef DEBUG

    //如果文件夹不存在或者不是一个文件夹那么就抛出一个异常

    //抛出异常会导致程序闪退,所以只在调试阶段抛出,发布阶段不要再抛了,不然极度影响用户体验

    BOOL isDirectory = NO;

    BOOL isExist = [fileManager fileExistsAtPath:path isDirectory:&isDirectory];

    if (!isExist || !isDirectory)

    {

        NSException *exception = [NSException exceptionWithName:@"fileError" reason:@"please check your filePath!" userInfo:nil];

        [exception raise];

    }

    NSLog(@"debug");

//发布

#else

    NSLog(@"release");

#endif

    //获取“path”文件夹下面的所有文件

    NSArray *subpathArray= [fileManager subpathsAtPath:path];

    NSString *filePath = nil;

    NSInteger totleSize=0;

    for (NSString *subpath in subpathArray)

    {

        //拼接每一个文件的全路径

        filePath =[path stringByAppendingPathComponent:subpath];

        //isDirectory,是否是文件夹,默认不是

        BOOL isDirectory = NO;

        //isExist,判断文件是否存在

        BOOL isExist = [fileManager fileExistsAtPath:filePath isDirectory:&isDirectory];

        //判断文件是否存在,不存在的话过滤

        //如果存在的话,那么是否是文件夹,是的话也过滤

        //如果文件既存在又不是文件夹,那么判断它是不是隐藏文件,是的话也过滤

        //过滤以上三个情况后,就是一个文件夹里面真实的文件的总大小

        //以上判断目的是忽略不需要计算的文件

        if (!isExist || isDirectory || [filePath containsString:@".DS"]) continue;

            //NSLog(@"%@",filePath);

            //指定路径,获取这个路径的属性

            //attributesOfItemAtPath:需要传文件夹路径

            //但是attributesOfItemAtPath 只可以获得文件属性,不可以获得文件夹属性,这个也就是需要for-in遍历文件夹里面每一个文件的原因

            NSDictionary *dict=   [fileManager attributesOfItemAtPath:filePath error:nil];

            NSInteger size=[dict[@"NSFileSize"] integerValue];

            totleSize+=size;

     }

    //将文件夹大小转换为 M/KB/B

    NSString *totleStr = nil;

    if (totleSize > 1000 * 1000)

    {

      totleStr = [NSString stringWithFormat:@"%.1fM",totleSize / 1000.0f /1000.0f];

    }else if (totleSize > 1000)

    {

      totleStr = [NSString stringWithFormat:@"%.1fKB",totleSize / 1000.0f ];

    }else

    {

      totleStr = [NSString stringWithFormat:@"%.1fB",totleSize / 1.0f];

    }

    return totleStr;

}

 

//清除path文件夹下缓存大小

+ (BOOL)clearCacheWithFilePath:(NSString *)path

{

    //拿到path路径的下一级目录的子文件夹

    NSArray *subpathArray = [fileManager contentsOfDirectoryAtPath:path error:nil];

    NSError *error;

    NSString *filePath;

    for (NSString *subpath in subpathArray)

    {

        if (![subpath isEqualToString:@"Snapshots"])//这个文件无访问权限

        {

            filePath =[path stringByAppendingPathComponent:subpath];

            //删除子文件夹

            [fileManager removeItemAtPath:filePath error:&error];

            if (error) {

                NSLog(@"%@",[NSString stringWithFormat:@"清理文件夹失败路径:%@",filePath]);

                [MyHUD showInView:ShareApp.window text:@"清理缓存失败"];

                return NO;

            }else{

                NSLog(@"%@",[NSString stringWithFormat:@"清除文件夹成功路径:%@",filePath]);

            }

        }

       

    }

    [MyHUD showInView:ShareApp.window text:@"清理缓存成功"];

    NSLog(@"清理缓存成功");

//    AudioServicesPlaySystemSound(kSystemSoundID_Vibrate);//手机震动

    return YES;

}

@end

 

posted @ 2018-02-08 15:35  王彬iOS  阅读(528)  评论(0编辑  收藏  举报