美文网首页iOS Developer
获取和清除缓存

获取和清除缓存

作者: LeeDev | 来源:发表于2016-10-13 13:09 被阅读74次

    获取某个文件夹的缓存本来我是以为NSDictionary<NSString *, id> *attributes = [manager attributesOfItemAtPath :filePath error:nil];
    [attributes fileSize]; 直接获取某个文件夹的数据,其实是我太天真了,可以打印一下size ,完全对不上。这个时候需要用到 NSArray *childerFiles=[fileManager subpathsAtPath:folderPath]; 这个方法,特别提示是这个方法 深度递归去找所有的子文件夹和文件,这下再加起来就可以获得总的size。

    /* 
     * 只是计算某个(不是文件夹) 路径的 size
     * 如果计算 文件夹 只会计算该文件夹的size  不会计算文件夹里面的size
     **/
    + (long long)fileSizeAtPath:( NSString *)filePath {
        
        NSFileManager *manager = [ NSFileManager defaultManager];
        if ([manager fileExistsAtPath :filePath]){
            NSDictionary<NSString *, id> *attributes = [manager attributesOfItemAtPath :filePath error:nil];
            return [attributes fileSize];
        }
        return 0;
    }
    
    /*
     * 进行深度遍历 某个文件夹里面的所有的文件
     **/
    + (float)folderSizeAtPath:(NSString *)folderPath {
        
        NSFileManager *fileManager = [NSFileManager defaultManager];
        if (![fileManager fileExistsAtPath :folderPath])return 0;
        long long folderSize=0;
        if ([fileManager fileExistsAtPath:folderPath]) {
            
            /*
             * subpathsAtPath : This may be very expensive to compute for deep filesystem hierarchies, and should probably be avoided. 
             * 就是说会自己深度遍历所有的 子文件
             **/
            NSArray *childerFiles=[fileManager subpathsAtPath:folderPath];
            for (NSString *fileName in childerFiles) {
                
                NSString *fileAbsolutePath=[folderPath stringByAppendingPathComponent:fileName];
                long long size=[self fileSizeAtPath:fileAbsolutePath];
                folderSize += size;
            }
        }
        return folderSize/1024.0/1024.0;
    }
    /*
     * 清楚某个路径的cache
     **/
    +(void)clearCache:(NSString *)path{
        
        NSFileManager *fileManager=[NSFileManager defaultManager];
        if ([fileManager fileExistsAtPath:path]) {
            NSArray *childerFiles=[fileManager subpathsAtPath:path];
            for (NSString *fileName in childerFiles) {
                
                NSString *fileAbsolutePath=[path stringByAppendingPathComponent:fileName];
                [fileManager removeItemAtPath:fileAbsolutePath error:nil];
            }
        }
    }
    
    

    相关文章

      网友评论

        本文标题:获取和清除缓存

        本文链接:https://www.haomeiwen.com/subject/cbuwyttx.html