获取缓存文件大小并清理 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(@"清理成功");
}

 

 

 

posted @ 2015-08-17 20:43  sixindev  阅读(401)  评论(0编辑  收藏  举报