ios 获取缓存文件大小

方法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];
}

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