方法1:通过目录枚举类NSDirectoryEnumerator
NSDirectoryEnumerator : 通过目录枚举类(个人认为把这个类理解成文件遍历器更好理解)的enumeratorAtPath方法一次可以枚举指定目录中的每一个文件. 默认情况下,如果其中一个文件夹包含子文件,那么
也会递归枚举它的子文件
. 该方法返回一个目录的所有资源列表.
-(CGFloat) getCacheSize
{
//获取文件管理器对象
NSFileManager * fileManger = [NSFileManager defaultManager];
//获取缓存沙盒路径
NSString * cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
//拼接缓存文件夹路径
NSString * fileCachePath = [cachePath stringByAppendingPathComponent:@"缓存文件夹(非全路径)"];
//将缓存文件夹路径赋值给成员属性(后面删除缓存文件时需要用到)
self.fileCachePath = fileCachePath;
//通过缓存文件路径创建文件遍历器
NSDirectoryEnumerator * fileEnumrator = [fileManger enumeratorAtPath:fileCachePath];
//先定义一个缓存目录总大小的变量
NSInteger fileTotalSize = 0;
for (NSString * fileName in fileEnumrator)
{
//拼接文件全路径(注意:是文件)
NSString * filePath = [fileCachePath stringByAppendingPathComponent:fileName];
//获取文件属性
NSDictionary * fileAttributes = [fileManger attributesOfItemAtPath:filePath error:nil];
//根据文件属性判断是否是文件夹(如果是文件夹就跳过文件夹,不将文件夹大小累加到文件总大小)
if ([fileAttributes[NSFileType] isEqualToString:NSFileTypeDirectory]) continue;
//获取单个文件大小,并累加到总大小
fileTotalSize += [fileAttributes[NSFileSize] integerValue];
}
//将字节大小转为MB,然后传出去
return fileTotalSize/1000.0/1000;
}
方法2:通过NSFileManger类的subpathsAtPath对象方法获取
这个方法和上面那个方法,代码大部分都是一样的,只是在获取文件的时候使用的方法不一样。后面同样需要拼接全路径、判断是否是文件夹。也可以获取子文件夹下的文件,个人觉得这个方法更简单一点。
-(CGFloat) getCacheSize
{
//获取文件管理器对象
NSFileManager * fileManger = [NSFileManager defaultManager];
//获取缓存沙盒路径
NSString * cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
//拼接缓存文件文件夹路径
NSString * fileCachePath = [cachePath stringByAppendingPathComponent:@"缓存文件夹(非全路径)"];
//将缓存文件夹路径赋值给成员属性(后面删除缓存文件时需要用到)
self.fileCachePath = fileCachePath;
//获取到该缓存目录下的所有子文件(只是文件名并不是路径,后面要拼接)
NSArray * subFilePath = [fileManger subpathsAtPath:fileCachePath];
//先定义一个缓存目录总大小的变量
NSInteger fileTotalSize = 0;
for (NSString * fileName in subFilePath)
{
//拼接文件全路径(注意:是文件)
NSString * filePath = [fileCachePath stringByAppendingPathComponent:fileName];
//获取文件属性
NSDictionary * fileAttributes = [fileManger attributesOfItemAtPath:filePath error:nil];
//根据文件属性判断是否是文件夹(如果是文件夹就跳过文件夹,不将文件夹大小累加到文件总大小)
if ([fileAttributes[NSFileType] isEqualToString:NSFileTypeDirectory]) continue;
//获取单个文件大小,并累加到总大小
fileTotalSize += [fileAttributes[NSFileSize] integerValue];
}
//将字节大小转为MB,然后传出去
return fileTotalSize/1000.0/1000;
}
删除缓存文件
前提是将之前获取到的缓存文件夹路径保存到成员变量
@interface LGSettingTableVC ()
/** 缓存文件夹路径属性 */
@property (nonatomic, copy) NSString * fileCachePath;
@end
传入之前成员变量保存的缓存目录即可删除
//清除缓存
-(void) cleanCache
{
//删除缓存目录下所有缓存文件
[[NSFileManager defaultManager] removeItemAtPath:self.fileCachePath error:nil];
}