美文网首页
知识点29:封装计算缓存的类

知识点29:封装计算缓存的类

作者: 枫之叶_小乙哥 | 来源:发表于2017-02-12 11:46 被阅读9次
    // .h文件
    
    #import <Foundation/Foundation.h>
    
    @interface NSString (ZGKCalculateCacheExtension)
    //+ (unsigned long long)getCacheSizeFromfilePath:(NSString *)filePath;
    
    - (unsigned long long)fileSize;
    @end
    
    
    // .m文件
    #import "NSString+ZGKCalculateCacheExtension.h"
    
    @implementation NSString (ZGKCalculateCacheExtension)
    //+ (unsigned long long)getCacheSizeFromfilePath:(NSString *)filePath{
    //
    //}
    // 方法一:通过attrs为nil,则attrs.fileSize也为0,来排除文件不存在的情况
    //- (unsigned long long)fileSize{
    //    
    //    // 0.文件管理者
    //    NSFileManager *manager = [NSFileManager defaultManager];
    //    
    //    // 判断是文件还是文件夹(文件夹:NSFileTypeDirectory 文件:NSFileTypeRegular)
    //    BOOL isDirectory  = [[manager attributesOfItemAtPath:self error:nil].fileType isEqualToString:NSFileTypeDirectory];
    //    
    //    // 储存文件大小
    //    unsigned long long size = 0;
    //
    //    if (isDirectory) { // 文件夹
    //        // 2.使用遍历器储存所有子路径
    //        NSDirectoryEnumerator *enumerator = [manager enumeratorAtPath:self];
    //        
    //        // 3.计算所有子级目录的大小(注意:在mac系统下1M = 1000KB,而不是1024)
    //        for (NSString *subPath in enumerator) {
    //            
    //            // 3.0拼接成完整的子路径
    //            NSString *fullPath = [self stringByAppendingPathComponent:subPath];
    //            
    //            // 3.1文件属性
    //            NSDictionary *attrs = [manager attributesOfItemAtPath:fullPath error:nil];
    //            
    //            // 3.2累加(fileSize直接返回文件的大小)
    //            size += attrs.fileSize;
    //            //        size += [attrs[NSFileSize] unsignedLongLongValue];
    //        }
    //
    //    }else{ // 文件
    //        NSDictionary *attrs = [manager attributesOfItemAtPath:self error:nil];
    //        size = attrs.fileSize;
    //    }
    //    
    //    // 4.返回总缓存大小
    //    return size; // 1168471
    //}
    
    
    // 方法二:通过[manager fileExistsAtPath:self isDirectory:&isDirectory]来判断文件不存在的情况
    // 对象方法对比类方法比较好用
    /**** 计算缓存的方法要在子线程中计算,再返回主线程刷新UI ****/
    - (unsigned long long)fileSize{
        
        // 0.文件管理者
        NSFileManager *manager = [NSFileManager defaultManager];
        
        // 判断文件会否存在(还可以判断是否是文件夹)
        BOOL isExist = NO;   // 文件是否存在
        BOOL isDirectory  = NO;  // 是否是文件夹
    
        isExist = [manager fileExistsAtPath:self isDirectory:&isDirectory];
        
        // 储存文件大小
        unsigned long long size = 0;
        
        if (!isExist) {
            ZGKLog(@"warning: 要计算缓存的文件夹不存在")
            return size;
        }
        // 判断是文件还是文件夹(文件夹:NSFileTypeDirectory 文件:NSFileTypeRegular)
        
        // 判断是否是文件夹
    //    isDirectory = [[manager attributesOfItemAtPath:self error:nil].fileType isEqualToString:NSFileTypeDirectory];
        
        if (isDirectory) { // 文件夹
            // 2.使用遍历器储存所有子路径
            NSDirectoryEnumerator *enumerator = [manager enumeratorAtPath:self];
            
            // 3.计算所有子级目录的大小(注意:在mac系统下1M = 1000KB,而不是1024)
            for (NSString *subPath in enumerator) {
                
                // 3.0拼接成完整的子路径
                NSString *fullPath = [self stringByAppendingPathComponent:subPath];
                
                // 3.1文件属性
                NSDictionary *attrs = [manager attributesOfItemAtPath:fullPath error:nil];
                
                // 3.2累加(fileSize直接返回文件的大小)
                size += attrs.fileSize;
                //        size += [attrs[NSFileSize] unsignedLongLongValue];
            }
            
        }else{ // 文件
            NSDictionary *attrs = [manager attributesOfItemAtPath:self error:nil];
            size = attrs.fileSize;
        }
        
        // 4.返回总缓存大小
        return size; // 1168471
    }
    @end
    
    • 1.给一个文件路径,就可以计算该路径文件大小
    • 2.计算方法要在子线程执行
    • 3.注意:程序中要先判断文件是否存在,其次判断该文件是文件夹还是文件,如果文件不存在提前返回结果
    • 4.判断文件的是否存在,是否为文件夹,都是NSFileManager的对象方法

    相关文章

      网友评论

          本文标题:知识点29:封装计算缓存的类

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