• 获取缓存文件大小并清理 By HL


    通常用于删除缓存的时,计算缓存大小

    //单个文件的大小
    - (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);
    }
    

     遍历出Caches目录的所有文件大小

        - (void)fileSize{  
          
            NSFileManager *manager = [NSFileManager defaultManager];  
            NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];  
              
            NSArray *files = [manager subpathsOfDirectoryAtPath:cachePath error:nil]; // 递归所有子路径  
              
            NSInteger totalSize = 0;  
              
            for (NSString *filePath in files) {  
                NSString *path = [cachePath stringByAppendingPathComponent:filePath];  
                // 判断是否为文件  
                BOOL isDir = NO;  
                [manager fileExistsAtPath:path isDirectory:&isDir];  
                if (!isDir) {  
                    NSDictionary *attrs = [manager attributesOfItemAtPath:path error:nil];  
                    totalSize += [attrs[NSFileSize] integerValue];  
                }  
            }  
              
            NSLog(@"%d",totalSize);  
              
        }  
    

    SDImageCache计算缓存方法

    - (NSUInteger)getSize {
        __block NSUInteger size = 0;
        dispatch_queue_t ioQueue = dispatch_queue_create("com.hackemist.SDWebImageCache", DISPATCH_QUEUE_SERIAL);
        dispatch_sync(ioQueue, ^{
            NSDirectoryEnumerator *fileEnumerator = [_fileManager enumeratorAtPath:self.diskCachePath];
            for (NSString *fileName in fileEnumerator) {
                NSString *filePath = [self.diskCachePath stringByAppendingPathComponent:fileName];
                NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfItemAtPath:filePath error:nil];
                size += [attrs fileSize];
            }
        });
        return size;
    }
    

     

    删除缓存

    //单文件

    -(void)cleanDisk{
        NSFileManager *defaultManager = [NSFileManager defaultManager];
        [defaultManager removeItemAtPath:self.diskCachePath error:nil];
    }
    

    多文件

    -(void)cleanDisk{
        dispatch_async(
                       dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
                       , ^{
                           NSString *cachPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask, YES) objectAtIndex:0];
    
                           NSArray *files     = [[NSFileManager defaultManager] subpathsAtPath:cachPath];
                           NSLog(@"files :%d",[files count]);
                           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
    {
        NSLog(@"清理成功");
    }
    
  • 相关阅读:
    HTML基本知识
    几个常用的正则表达式
    C#操作文件
    传说中的WCF(3):多个协定
    传说中的WCF(2):服务协定的那些事儿
    查询表、存储过程、触发器的创建时间和最后修改时间
    SQL四舍五入及两种舍入
    自制 JS.format带分页索引
    js:字符串(string)转json
    $.each 和$(selector).each()的区别
  • 原文地址:https://www.cnblogs.com/sixindev/p/4737673.html
Copyright © 2020-2023  润新知