先贴代码:
// 获取文件或者文件夹大小(单位: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
网友评论