获取某个文件夹的缓存本来我是以为NSDictionary<NSString *, id> *attributes = [manager attributesOfItemAtPath :filePath error:nil];
[attributes fileSize]; 直接获取某个文件夹的数据,其实是我太天真了,可以打印一下size ,完全对不上。这个时候需要用到 NSArray *childerFiles=[fileManager subpathsAtPath:folderPath]; 这个方法,特别提示是这个方法 深度递归去找所有的子文件夹和文件,这下再加起来就可以获得总的size。
/*
* 只是计算某个(不是文件夹) 路径的 size
* 如果计算 文件夹 只会计算该文件夹的size 不会计算文件夹里面的size
**/
+ (long long)fileSizeAtPath:( NSString *)filePath {
NSFileManager *manager = [ NSFileManager defaultManager];
if ([manager fileExistsAtPath :filePath]){
NSDictionary<NSString *, id> *attributes = [manager attributesOfItemAtPath :filePath error:nil];
return [attributes fileSize];
}
return 0;
}
/*
* 进行深度遍历 某个文件夹里面的所有的文件
**/
+ (float)folderSizeAtPath:(NSString *)folderPath {
NSFileManager *fileManager = [NSFileManager defaultManager];
if (![fileManager fileExistsAtPath :folderPath])return 0;
long long folderSize=0;
if ([fileManager fileExistsAtPath:folderPath]) {
/*
* subpathsAtPath : This may be very expensive to compute for deep filesystem hierarchies, and should probably be avoided.
* 就是说会自己深度遍历所有的 子文件
**/
NSArray *childerFiles=[fileManager subpathsAtPath:folderPath];
for (NSString *fileName in childerFiles) {
NSString *fileAbsolutePath=[folderPath stringByAppendingPathComponent:fileName];
long long size=[self fileSizeAtPath:fileAbsolutePath];
folderSize += size;
}
}
return folderSize/1024.0/1024.0;
}
/*
* 清楚某个路径的cache
**/
+(void)clearCache:(NSString *)path{
NSFileManager *fileManager=[NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:path]) {
NSArray *childerFiles=[fileManager subpathsAtPath:path];
for (NSString *fileName in childerFiles) {
NSString *fileAbsolutePath=[path stringByAppendingPathComponent:fileName];
[fileManager removeItemAtPath:fileAbsolutePath error:nil];
}
}
}
网友评论