• 清除缓存,,计算文件夹大小


    #import "ViewController.h"

     

    @interface ViewController ()

     

    @end

     

    @implementation ViewController

     

    - (void)viewDidLoad {

        [super viewDidLoad];

        //

    //    NSLog(@"缓存文件大小为%@",[NSString stringWithFormat:@"%0.2fM",[self folderSizeAtPath:[NSString stringWithFormat:@"%@/Library/Caches/ImageCache",NSHomeDirectory()]]]);

        

    #pragma mark 沙盒:Library(系统文件) Temp(临时文件) Documents(用于App缓存)

        

        NSLog(@"===%@===",[NSString stringWithFormat:@"%0.2f",[self folderSizeAtPath:@"/Users/liushuo/Desktop/1567Pro15"]]);

        

        

        //清除缓存

        [self clearCacheFromPath:@"/Users/liushuo/Desktop/上线相关文档"];

     

        //这里填写的是对应SDWebImage所缓存图片的目录

        //可根据相应需求改成相应的文件目录

        // Do any additional setup after loading the view, typically from a nib.

    }

     

     

    //单个文件的大小

    - (long long) fileSizeAtPath:(NSString*) filePath{

        

        NSFileManager* manager = [NSFileManager defaultManager];

        if ([manager fileExistsAtPath:filePath]){

            return [[manager attributesOfItemAtPath:filePath error:nil] fileSize];

        }

        return 0;

    }

    //遍历文件夹获得文件夹大小,返回多少M

    - (float ) folderSizeAtPath:(NSString*) folderPath{

        NSFileManager* manager = [NSFileManager defaultManager];

        if (![manager fileExistsAtPath:folderPath])

            return 0;

        //通过枚举遍历法遍历文件夹中的所有文件

        //创建枚举遍历器

        NSEnumerator *childFilesEnumerator = [[manager subpathsAtPath:folderPath] objectEnumerator];

        //首先声明文件名称、文件大小

        NSString* fileName;

        long long folderSize = 0;

        while ((fileName = [childFilesEnumerator nextObject]) != nil){

            //得到当前遍历文件的路径

            NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];

            //调用封装好的获取单个文件大小的方法

            folderSize += [self fileSizeAtPath:fileAbsolutePath];

        }

        return folderSize/(1024.0*1024.0);//转换为多少M进行返回

        

    }

    #pragma mark 清除缓存大小 打印NSHomeDritiony前往Documents进行查看路径

    - (void)clearCacheFromPath:(NSString*)path{

        //建立文件管理器

        NSFileManager * manager = [NSFileManager defaultManager];

        if ([manager fileExistsAtPath:path]) {

            //如果文件路径存在 获取其中所有文件

            NSArray * fileArr = [manager subpathsAtPath:path];//找到所有子文件的路径,存到数组中。

            //首先需要转化为完整路径

            //直接删除所有子文件

            for (int i = 0; i < fileArr.count; i++) {

                NSString * fileName = fileArr[i];

                //完整路径

                NSString * filePath = [path stringByAppendingPathComponent:fileName];

                

                NSLog(@"%@",filePath);

                

                [manager removeItemAtPath:filePath error:nil];

            }

        }

    }

     

    - (void)didReceiveMemoryWarning {

        [super didReceiveMemoryWarning];

        // Dispose of any resources that can be recreated.

    }

     

    @end

     

     

     

    ////////////////////////////////////////////////////////////

    //融云的方法

    //清理缓存

    - (void)clearCache {

      dispatch_async(

          dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

     

            //这里清除 Library/Caches 里的所有文件,融云的缓存文件及图片存放在 Library/Caches/RongCloud

            NSString *cachPath = [NSSearchPathForDirectoriesInDomains(

                NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0];

            NSArray *files =

                [[NSFileManager defaultManager] subpathsAtPath:cachPath];

     

            for (NSString *p in files) {

              NSError *error;

              NSString *path = [cachPath stringByAppendingPathComponent:p];

              if ([[NSFileManager defaultManager] fileExistsAtPath:path]) {

                [[NSFileManager defaultManager] removeItemAtPath:path error:&error];

              }

            }

            [self performSelectorOnMainThread:@selector(clearCacheSuccess)

                                   withObject:nil

                                waitUntilDone:YES];

          });

    }

     

    - (void)clearCacheSuccess {

      UIAlertView *alertView =

          [[UIAlertView alloc] initWithTitle:nil

                                     message:@"缓存清理成功!"

                                    delegate:nil

                           cancelButtonTitle:@"确定"

                           otherButtonTitles:nil, nil];

      [alertView show];

    }

     

     

  • 相关阅读:
    URLProtocol服务协议
    ODBC、OLEDB和ADO之间的关系 ,以及性能比较
    如何在VS2015查看C#界面窗体里的控件层次
    SpeechVoiceSpeakFlags枚举类型的详细解释
    SQL中遇到多条相同内容只取一条的最简单实现方法
    flink elasticsearch sink table 忽略部分字段开发
    flink elasticsearch source table 集成elasticsearch-hadoop connector开发
    记一次python 协程给合多线程死锁问题
    kubernetes gitlab runner java maven ci/cd 整体方案示例
    某云elasticsearch节点失效,手动重置primary,迁移分区
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6024081.html
Copyright © 2020-2023  润新知