iOS计算文件夹或文件大小

先贴代码:

// 获取文件或者文件夹大小(单位:B)
+ (unsigned long long)sizeAtPath:(NSString *)path {
    NSFileManager *fm = [NSFileManager defaultManager];
    BOOL isDir = YES;
    if (![fm fileExistsAtPath:path isDirectory:&isDir]) {
        return 0;
    };
    unsigned long long fileSize = 0;
    // directory
    if (isDir) {
        NSDirectoryEnumerator *enumerator = [fm enumeratorAtPath:path];
        while (enumerator.nextObject) {
           // 下面注释掉的代码作用:不递归遍历子文件夹
           // if ([enumerator.fileAttributes.fileType isEqualToString:NSFileTypeDirectory]) {
           //      [enumerator skipDescendants];
           // }
            fileSize += enumerator.fileAttributes.fileSize;
        }
    } else {
        // file
        fileSize = [fm attributesOfItemAtPath:path error:nil].fileSize;
    }
    return fileSize;
}

解释说明

上面的方法遍历文件夹利用了系统的目录枚举类NSDirectoryEnumerator来递归遍历文件夹。
NSDirectoryEnumerator默认递归遍历文件夹。如果不想遍历子文件夹下的文件,可以调用NSDirectoryEnumerator的实例方法skipDescendants来禁用遍历子文件夹(代码可以参照注释掉的代码)。主要注意的一点是,在上面的递归遍历方法中,我并没有判断文件类型(文件夹还是文件)来计算整个文件大小。原因是:我发现文件夹也有大小(大家可以自己复制代码测一测)。我自己封装了一个目录类YSDirectoryManager,欢迎大家参考使用。GitHub地址如下:
GitHub

你可能感兴趣的:(iOS计算文件夹或文件大小)