在有一些应用中应该都会有一些缓存是保存在磁盘中的,然后应用也会去提供清除缓存的按钮,而且还会告诉你缓存现在有多大
那么我们是如何去得到缓存大小的呢,如何去清除? 首先我们要明确既然要得到缓存的大小,那么我们肯定需要去得到文件的大小
但是这里需要注意的是文件夹本身是没有文件大小这个属性的,可能会有疑问了,但是我右键可以查看,那个是通过计算文件夹中
的文件去计算出来的。在ios中我们想操纵文件的话是需要去用到一个类的就是NSFileManager,我们如果直接去获取文件夹的大小是获取
不到的,准备的说是NSFileSize对应的值不对,但是如果通过获取文件的大小是获取的到的,如下所示
//获取文件管理者
NSFileManager * mgr = [NSFileManager defaultManager];
//获取缓存路径
NSString * string = @"文件路径";
NSDictionary * attrs = [mgr attributesOfItemAtPath:string error:NULL];
NSLog(@"%@",attrs);
//获取文件夹中的所有的直接内容
NSArray * contents = [mgr contentsOfDirectoryAtPath:string error:NULL];
我们可以给NSString增加一个分类去计算文件夹的大小
-(NSInteger)fileSize
{
NSFileManager * mgr = [NSFileManager defaultManager];
//判断是否为文件夹的一个标记
BOOL isDirectory = NO;
//isDirectory传入进去,取出的如果是YES就是文件夹
BOOL exists = [mgr fileExistsAtPath:self isDirectory:&isDirectory];
//判断文件或者文件夹存不存在
if(exists==NO)
{
return 0;
}
//如果是一个文件夹,我们就去遍历caches中的所有的内容包括直接和间接的内容
if(isDirectory)
{
NSArray * subPaths = [mgr subpathsAtPath:self];
NSInteger totalByteSize =0;
for(NSString * subPath in subPaths)
{
//获取全路径
NSString * fullSubPath = [self stringByAppendingPathComponent:subPath];
//判断是否为文件
BOOL isDirectory = NO;
//表示是文件
if(isDirectory==NO)
{
totalByteSize+=[[mgr attributesOfItemAtPath:fullSubPath error:NULL][NSFileSize]integerValue];
}
}
return totalByteSize;
}
//如果是单个文件就输出文件大小
else
{
return [[mgr attributesOfItemAtPath:self error:NULL][NSFileSize]integerValue];
}
}
如果我们要去删除某个文件或者某个文件夹,我们直接用文件管理者对象的一个方法就可以了 NSString * str1 = @"文件/文件夹路径";
[mgr removeItemAtPath:str1 error:NULL];
还有一个方法是可以做到类似于剪切操作的
[mgr moveItemAtPath:path1 toPath:path2 error:(NSError * _Nullable __autoreleasing * _Nullable)];