在一些软件中,一般都会给用户展现当前APP的内存,同时用户可以根据自己的需要来清除缓存的内容。一般而言,文件夹是没有大小这个属性的,所以需要遍历文件夹的内容来计算文件夹的大小,下面用NSFileManger来实现这个功能。
了解到文件/文件夹路径是一个NSString字符串类型,所以可以给字符串添加分类,如果其是文件/文件夹实现计算其大小的功能。分类命名为fileSize.
1 - (NSInteger)fileSize{ 2 //文件管理者 3 NSFileManager *mgr = [NSFileManager defaultManager]; 4 //判断字符串是否为文件/文件夹 5 BOOL dir = NO; 6 BOOL exists = [mgr fileExistsAtPath:self isDirctory:&dir]; 7 //文件/文件夹不存在 8 if (exists == NO) return 0; 9 //self是文件夹 10 if (dir){ 11 //遍历文件夹中的所有内容 12 NSArray *subpaths = [mgr subpathsAtPath:self]; 13 //计算文件夹大小 14 NSInteger totalByteSize = 0; 15 for (NSString *subpath in subpaths){ 16 //拼接全路径 17 NSString *fullSubPath = [self stringByAppendingPathComponent:subpath]; 18 //判断是否为文件 19 BOOL dir = NO; 20 [mgr fileExistsAtPath:fullSubPath isDirectory:&dir]; 21 if (dir == NO){//是文件 22 NSDictionary *attr = [mgr attributesOffItemAtPath:fullSubPath error:ni]; 23 totalByteSize += [attr[NSFileSize] integerValue]; 24 } 25 } 26 return totalByteSize; 27 } else{//是文件 28 NSDictionary *attr = [mgr attributesOffItemAtPath:self error:ni]; 29 return [attr[NSFileSize] integerValue]; 30 } 31 }
这样就可以实现文件/文件夹大小的计算
比如计算Caches文件的大小
1 NSString *caches =[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject]; 2 Integer cachesSize = [caches fileSize];
这样就得到了caches文件夹的大小。
如果输入的字符串不是文件/文件夹的时候,得到0。