美文网首页
计算文件夹/文件的总大小

计算文件夹/文件的总大小

作者: ShenYj | 来源:发表于2017-03-13 13:42 被阅读114次

    根据上一篇计算文件夹大小文章进一步扩展,封装一个自动根据路径获取该文件或文件夹的大小的NSString分类

    #import "NSString+JSFileSize.h"
    
    @implementation NSString (JSFileSize)
    
    - (unsigned long long)fileSize {
        
        unsigned long long fileSize = 0;
        // 文件管理者
        NSFileManager *fileManager = [NSFileManager defaultManager];
        // 通过当前路径获取文件或文件夹
        NSError *error = nil;
        NSDictionary *attributes = [fileManager attributesOfItemAtPath:self error:&error];
        if (error || !attributes) {
            NSLog(@"%@",error);
            return 0.0;
        }
        // 判断类型 文件 或 文件夹 或者 其他
        NSString *fileType = attributes.fileType;
        
        if ([fileType isEqualToString:NSFileTypeDirectory]) {
            // 文件夹
            NSArray <NSString *>*subPaths = [fileManager subpathsAtPath:self];
            // 遍历子路径,累加文件大小
            for (NSString *subPath in subPaths) {
                // 拼接全路径
                NSString *fullPath = [self stringByAppendingPathComponent:subPath];
                NSError *error = nil;
                NSDictionary *attrs = [fileManager attributesOfItemAtPath:fullPath error:&error];
                if (error) {
                    NSLog(@"%@",error);
                }
                fileSize += attrs.fileSize;
                
            }
        } else if ([fileType isEqualToString:NSFileTypeRegular]) {
            // 文件
            fileSize = attributes.fileSize;
        }
        return fileSize;
    }
    
    - (void)logFileSize {
        
        unsigned long long fileSize = 0;
        // 文件管理者
        NSFileManager *fileManager = [NSFileManager defaultManager];
        // 是否为文件夹
        BOOL isDirectory = NO;
        //  路径是否仔仔
        BOOL isExist = [fileManager fileExistsAtPath:self isDirectory:&isDirectory];
        
        if (!isExist) {
            return;
        }
        
        if (isDirectory) {
            // 文件夹
            NSArray <NSString *>*subPaths = [fileManager subpathsAtPath:self];
            // 遍历子路径,累加文件大小
            for (NSString *subPath in subPaths) {
                // 拼接全路径
                NSString *fullPath = [self stringByAppendingPathComponent:subPath];
                NSError *error = nil;
                NSDictionary *attrs = [fileManager attributesOfItemAtPath:fullPath error:&error];
                if (error) {
                    NSLog(@"%@",error);
                }
                fileSize += attrs.fileSize;
                
            }
        } else {
            // 通过当前路径获取文件或文件夹
            NSError *error = nil;
            NSDictionary *attributes = [fileManager attributesOfItemAtPath:self error:&error];
            if (error || !attributes) {
                NSLog(@"%@",error);
                return ;
            }
            // 文件
            fileSize = attributes.fileSize;
        }
        NSLog(@"文件/文件夹大小:%llu B",fileSize);
    }
    
    @end
    
    

    封装了两个方法

    /** 返回文件或文件夹的大小,单位B */
    - (unsigned long long)fileSize;
    
    /** 控制台打印文件或文件夹大小 */
    - (void)logFileSize;
    

    两个方法中fileSize用于返回具体的值,而logFileSize只用于控制台的打印
    主要区别在于判断是文件还是文件夹的方式不同,计算的过程完全一致

    这样在开发中,我们只需要拼接好路径来调用API即可


    相关文章

      网友评论

          本文标题:计算文件夹/文件的总大小

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