ios获取缓存文件的大小并清除缓存


移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为SDWebImage。

但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯、购物、阅读类app的标配功能。

今天介绍的离线缓存功能的实现,主要分为缓存文件大小的获取、清除缓存文件的实现。

1. 获取缓存文件的大小

-( float )readCacheSize

{

NSString *cachePath = [NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES) firstObject];

return [ self folderSizeAtPath :cachePath];

}

由于缓存文件存在沙箱中,我们可以通过NSFileManager API来实现对缓存文件大小的计算。

// 遍历文件夹获得文件夹大小,返回多少 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);

}

// 计算 单个文件的大小

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

NSFileManager * manager = [NSFileManager defaultManager];

if ([manager fileExistsAtPath :filePath]){

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

}

return 0;

}

2. 清除缓存

- (void)clearFile

{

NSString * cachePath = [NSSearchPathForDirectoriesInDomains (NSCachesDirectory , NSUserDomainMask , YES ) firstObject];

NSArray * files = [[NSFileManager defaultManager ] subpathsAtPath :cachePath];

//NSLog ( @"cachpath = %@" , cachePath);

for ( NSString * p in files) {

NSError * error = nil ;

//获取文件全路径

NSString * fileAbsolutePath = [cachePath stringByAppendingPathComponent :p];

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

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

}

}

//读取缓存大小

float cacheSize = [self readCacheSize] *1024;

self.cacheSize.text = [NSString stringWithFormat:@"%.2fKB",cacheSize];

}



转自:http://www.cnblogs.com/linfenren/p/5985209.html

你可能感兴趣的:(ios获取缓存文件的大小并清除缓存)