现在很多App大都采用缓存机制来存储相关的数据,这样既可简单的处理自动登录,也可以暂时保存用户数据或者app使用中所大量用到的数据,然而这样一来,就造成前端缓存冗余过大,当然,一种解决办法为卸载后重新安装,但是这并不能直接解决问题,因为几乎所有用户并不会想到重新下载去清除缓存,都是默认更新,这样缓存文件还存在。
解决办法粘贴如下:
#pragma mark -- 计算目录下文件(除去.data文件)大小
- (NSString *)fileSizeForDir:(NSString*)path
{
// 总大小
unsigned long long size = 0;
NSString *sizeText = @"0 B";
// 文件管理者
NSFileManager *mgr = [NSFileManager defaultManager];
// 文件属性
NSDictionary *attrs = [mgr attributesOfItemAtPath:path error:nil];
// 如果这个文件或者文件夹不存在,或者路径不正确直接返回0;
if (attrs == nil) return [NSString stringWithFormat:@"%lluKB",size];
if ([attrs.fileType isEqualToString:NSFileTypeDirectory]) { // 如果是文件夹
// 获得文件夹的大小 == 获得文件夹中所有文件的总大小
NSDirectoryEnumerator *enumerator = [mgr enumeratorAtPath:path];
for (NSString *subpath in enumerator) {
if ([subpath rangeOfString:@".data"].location == NSNotFound) {
NSLog(@"该判断为不想要删除的文件类型");
} else {
//要删除的布局和问卷统计大小
// 全路径
NSString *fullSubpath = [path stringByAppendingPathComponent:subpath];
// 累加文件大小
size += [mgr attributesOfItemAtPath:fullSubpath error:nil].fileSize;
if (size >= pow(10, 9)) { // size >= 1GB
sizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)];
} else if (size >= pow(10, 6)) { // 1GB > size >= 1MB
sizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)];
} else if (size >= pow(10, 3)) { // 1MB > size >= 1KB
sizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)];
} else { // 1KB > size
sizeText = [NSString stringWithFormat:@"%zdB", size];
}
}
}
return sizeText;
} else { // 如果是文件
size = attrs.fileSize;
if (size >= pow(10, 9)) { // size >= 1GB
sizeText = [NSString stringWithFormat:@"%.2fGB", size / pow(10, 9)];
} else if (size >= pow(10, 6)) { // 1GB > size >= 1MB
sizeText = [NSString stringWithFormat:@"%.2fMB", size / pow(10, 6)];
} else if (size >= pow(10, 3)) { // 1MB > size >= 1KB
sizeText = [NSString stringWithFormat:@"%.2fKB", size / pow(10, 3)];
} else { // 1KB > size
sizeText = [NSString stringWithFormat:@"%zdB", size];
}
}
return sizeText;
}
上述方法,传入所要计算的文件夹路径,即可返回对应的文件大小。
希望此文档能帮助同类程序猿,有什么不同意见或间接,请回复,共同探讨。