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

2017-02-12  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读