当前位置: 移动技术网 > 移动技术>移动开发>IOS > ios开发中如何有效的清除文件缓存?

ios开发中如何有效的清除文件缓存?

2018年10月09日  | 移动技术网移动技术  | 我要评论

ios开发中如何有效的清除文件缓存?在有一些应用中应该都会有一些缓存是保存在磁盘中的,然后应用也会去提供清除缓存的按钮,而且还会告诉你缓存现在有多大。

那么我们是如何去得到缓存大小的呢,如何去清除? 首先我们要明确既然要得到缓存的大小,那么我们肯定需要去得到文件的大小

但是这里需要注意的是文件夹本身是没有文件大小这个属性的,可能会有疑问了,但是我右键可以查看,那个是通过计算文件夹中

的文件去计算出来的。在ios中我们想操纵文件的话是需要去用到一个类的就是nsfilemanager,我们如果直接去获取文件夹的大小是获取

不到的,准备的说是nsfilesize对应的值不对,但是如果通过获取文件的大小是获取的到的,如下所示

    //获取文件管理者
    nsfilemanager * mgr = [nsfilemanager defaultmanager];
    //获取缓存路径
    nsstring * string = @"文件路径";
    
    nsdictionary * attrs = [mgr attributesofitematpath:string error:null];
    
    nslog(@"%@",attrs);
    //获取文件夹中的所有的直接内容
 nsarray * contents = [mgr contentsofdirectoryatpath:string error:null];
\
我们可以给nsstring增加一个分类去计算文件夹的大小

 

 

-(nsinteger)filesize
{
    nsfilemanager * mgr = [nsfilemanager defaultmanager];
    //判断是否为文件夹的一个标记
    bool isdirectory = no;
    //isdirectory传入进去,取出的如果是yes就是文件夹
   bool exists = [mgr fileexistsatpath:self isdirectory:&isdirectory];
    //判断文件或者文件夹存不存在
    if(exists==no)
    {
        return 0;
    }
    //如果是一个文件夹,我们就去遍历caches中的所有的内容包括直接和间接的内容
    if(isdirectory)
    {
        nsarray * subpaths = [mgr subpathsatpath:self];
        nsinteger totalbytesize =0;
        for(nsstring * subpath in subpaths)
        {
          //获取全路径
            nsstring * fullsubpath = [self stringbyappendingpathcomponent:subpath];
            //判断是否为文件
            bool isdirectory = no;
            //表示是文件
            if(isdirectory==no)
            {
                totalbytesize+=[[mgr attributesofitematpath:fullsubpath error:null][nsfilesize]integervalue];
            }
        }
        return totalbytesize;
    }
    //如果是单个文件就输出文件大小
   else
    {
     return [[mgr attributesofitematpath:self error:null][nsfilesize]integervalue];
    }
}
如果我们要去删除某个文件或者某个文件夹,我们直接用文件管理者对象的一个方法就可以了
   nsstring * str1 = @"文件/文件夹路径";
    
    [mgr removeitematpath:str1 error:null];

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网