ZWCommonArrowItem *clearCache = [ZWCommonArrowItem itemWithTitle:@"清除图片缓存"];
// 1.创建文件管理者
NSFileManager *manager = [NSFileManager defaultManager];
// 获取缓存文件夹的地址
NSString *sdCachePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"com.hackemist.SDWebImageCache.default"];
#warning 通过attributesOfItemAtPath获取文件夹的大小不准确 ,获取文件的大小是准确的
// NSDictionary *attr = [manager attributesOfItemAtPath:sdCachePath error:nil];
// XZLog(@"%@", attr);
// 获取文件的总大小
long totalsSize = [self fileSizeWithPath:sdCachePath];
// 计算出文件有多少M
CGFloat size = totalsSize / (1024 * 1024.0);
if (size > 0.0) { //如果有缓存显示缓存文件大小
clearCache.subtitle = [NSString stringWithFormat:@"(%.1fM)", size];
} else {// 没有缓存不显示
clearCache.subtitle = nil;
}
// 装B写法
// __weak typeof(clearCache) weakClearCache = clearCache;
// __weak typeof(self) weakSelf = self;
__weak ZWCommonArrowItem *weakClearCache = clearCache;
__weak ZWGeneralViewController *weakSelf = self;
clearCache.opertion = ^{
if (weakClearCache.subtitle.length) {
// 1.提示用户正在清空缓存
[MBProgressHUD showMessage:@"亲~正在清除缓存,请不要猴急"];
// 2.真正的清空缓存
// [[SDWebImageManager sharedManager].imageCache clearDisk];
[manager removeItemAtPath:sdCachePath error:nil];
// 隐藏提示框
[MBProgressHUD hideHUD];
// 重新设置子标题
weakClearCache.subtitle = nil;
// 刷新表格
[weakSelf.tableView reloadData];
} else {
[MBProgressHUD showError:@"亲~缓存已经很干净了"];
}
};
/**
* 传入文件路径返回文件大小
*
* @param filePath 文件路径
*
* @return 返回文件大小
*/
- (long)fileSizeWithPath:(NSString *)filePath
{
// 1.安全性的校验
// 1.1创建文件管理者
NSFileManager *manager = [NSFileManager defaultManager];
// 1.2通过文件管理者对象判断文件是否存在
// 2.判断是文件还是文件夹
// ExistsAtPath :需要判断的路径
// isDirectory :判断是否是文件夹
// isExists返回值如果是YES代表文件或者文件夹存在如果NO代表不存在
// idr如果返回的是YES代表此文件是文件夹,否则就是文件
BOOL dir = NO;
BOOL isExists = [manager fileExistsAtPath:filePath isDirectory:&dir];
if (isExists == NO) {// 如果返回的是NO代表文件不存在
return 0;// 如果路径下没有文件或文件夹直接返回
}
// 2.判断是文件还是文件夹
if (dir) { // dir是YES代表是此文件是文件夹
// 3.计算大小
#warning 获取文件夹下面所有直接子文件的名称(只能获取文件夹里的一级目录文件如果有文件夹里面还有文件件只能获取子文件夹的名而不能获取子文件夹内的文件名)
// NSArray *subPaths = [manager contentsOfDirectoryAtPath:filePath error:nil];
#warning 获取文件平面下面所有(直接和间接)子文件的名称
NSArray *subPaths = [manager subpathsOfDirectoryAtPath:filePath error:nil];
// XZLog(@"%@", subPaths);
long totalSize = 0;
// 拼接文件的全路径
for (NSString *subpath in subPaths) {
// 1.拼接文件的全路径
NSString *fullPath = [filePath stringByAppendingPathComponent:subpath];
// 2.判断是否是文件夹,如果不是就累加
BOOL isDir = NO;
[manager fileExistsAtPath:fullPath isDirectory:&isDir];
if (isDir == NO) { // 是文件
NSDictionary *attr = [manager attributesOfItemAtPath:fullPath error:nil];
// 累加总文件大小
totalSize += [attr[NSFileSize] longValue];
}
}
return totalSize;
} else { // 是文件
// 计算大小
NSDictionary *attr = [manager attributesOfItemAtPath:filePath error:nil];
return [attr[NSFileSize] longValue];
}
// 3.计算大小
return 0;
}
封装`计算缓存文件大小并清除缓存`
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 接着上篇下载word/pdf/txt等文档的文章,此篇涉及到清除这些文档。本文实现文件/文件夹大小的计算以及清除文...