iOS 缓存文件管理
iOS 应用文件缓存一般分为2种情况:用户自己缓存,第三方库SDWebImage的缓存;
对缓存大小的统计主要依赖于iOS提供的类NSFileManager来做;
一、单个文件计算大小
-(long long)fileSizeAtPath:(NSString *)path{NSFileManager *fileManager=[NSFileManager defaultManager];if([fileManager fileExistsAtPath:path]){long long size=[fileManager attributesOfItemAtPath:path error:nil].fileSize;return size;}return 0;
}
二、文件夹大小计算
-(float)folderSizeAtPath:(NSString *)path{NSFileManager *fileManager=[NSFileManager defaultManager];NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];cachePath=[cachePath stringByAppendingPathComponent:path];long long folderSize=0;if ([fileManager fileExistsAtPath:cachePath]){NSArray *childerFiles=[fileManager subpathsAtPath:cachePath];for (NSString *fileName in childerFiles){NSString *fileAbsolutePath=[cachePath stringByAppendingPathComponent:fileName];long long size=[self fileSizeAtPath:fileAbsolutePath];folderSize += size;NSLog(@"fileAbsolutePath=%@",fileAbsolutePath);}//SDWebImage框架自身计算缓存的实现folderSize+=[[SDImageCache sharedImageCache] getSize];return folderSize/1024.0/1024.0;}return 0;
}
三、文件清除
1、用户自身文件大小清除
利用NSFileManager API进行文件操作
-(void)clearCache:(NSString *)path{NSString *cachePath=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];cachePath=[cachePath stringByAppendingPathComponent:path];NSFileManager *fileManager=[NSFileManager defaultManager];if ([fileManager fileExistsAtPath:cachePath]) {NSArray *childerFiles=[fileManager subpathsAtPath:cachePath];for (NSString *fileName in childerFiles) {//如有需要,加入条件,过滤掉不想删除的文件NSString *fileAbsolutePath=[cachePath stringByAppendingPathComponent:fileName];NSLog(@"fileAbsolutePath=%@",fileAbsolutePath);[fileManager removeItemAtPath:fileAbsolutePath error:nil];}}
}
2、SDWebImage框架自己实现了清理缓存操作,我们可以直接调用。
-(void)clearCacheSDImageCache {
[[SDImageCache sharedImageCache] cleanDisk];
}
接口说明
1、OC中获取文件属性(Attributes)的方法,获得所给路径(path)的所有“文件属性(fileAttributes),返回一个字典(NSDictionary)来存储,即以键值对的形式存储;
- (nullable NSDictionary<NSFileAttributeKey, id> *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
返回属性字典的属性列表:
//如下属性可以使用点语法获取
Printing description of dic:
{NSFileCreationDate = "2016-10-18 10:12:47 +0000";NSFileExtensionHidden = 0;NSFileGroupOwnerAccountID = 501;NSFileGroupOwnerAccountName = mobile;NSFileModificationDate = "2016-10-18 10:12:48 +0000";NSFileOwnerAccountID = 0;NSFileOwnerAccountName = root;NSFilePosixPermissions = 420;NSFileProtectionKey = NSFileProtectionNone;NSFileReferenceCount = 1;NSFileSize = 12624777;NSFileSystemFileNumber = 6841436;NSFileSystemNumber = 16777219;NSFileType = NSFileTypeRegular;
}
2、OC中获取文件系统属性
获得所给路径(path)所在“文件系统的属性,返回一个字典(NSDictionary)来存储,即以键值对的形式存储
- (nullable NSDictionary<NSFileAttributeKey, id> *)attributesOfFileSystemForPath:(NSString *)path error:(NSError **)error NS_AVAILABLE(10_5, 2_0);
返回属性字典的属性列表:
Printing description of dicc:
{NSFileSystemFreeNodes = 903996;NSFileSystemFreeSize = 3702767616;NSFileSystemNodes = 3128248;NSFileSystemNumber = 16777219;NSFileSystemSize = 12813312000;
}//model
//获得所给文件路径所在文件系统的属性
NSDictionary *attrs = [fm attributesOfFileSystemForPath:file error:nil];//取出文件系统的属性中NSFileSystemSize键所对应的值,即系统硬盘已经存储的大小NSNumber *systemSize = attrs[NSFileSystemSize];NSNumber *systemFreeSize = attrs[NSFileSystemFreeSize];
文件大小获取方式的优化方案
//需要引入头文件
#import <sys/stat.h>- (void)fileSize {struct stat statbuf;const char *cpath = [@"pa" UTF8String];if (cpath && stat(cpath, &statbuf) == 0) {NSNumber *fileSize = [NSNumber numberWithUnsignedLongLong:statbuf.st_size];NSDate *modificationDate = [NSDate dateWithTimeIntervalSince1970:statbuf.st_mtime];NSDate *creationDate = [NSDate dateWithTimeIntervalSince1970:statbuf.st_ctime];// etc}
}
ios 设备磁盘剩余空间统计
/// Free disk space in bytes.
static int64_t _KKeyDiskSpaceFree() {NSError *error = nil;NSDictionary *attrs = [[NSFileManager defaultManager] attributesOfFileSystemForPath:NSHomeDirectory() error:&error];if (error) return -1;int64_t space = [[attrs objectForKey:NSFileSystemFreeSize] longLongValue];if (space < 0) space = -1;return space;
}
注:1k = 1024 byte,但是硬盘上的换算是1K=1000字节
iOS 缓存文件管理相关推荐
- iOS缓存设计(YYCache思路)
iOS缓存设计(YYCache思路) 前言: 前段时间业务有缓存需求,于是结合YYCache和业务需求,做了缓存层(内存&磁盘)+ 网络层的方案尝试 由于YYCache 采用了内存缓存和磁盘缓 ...
- 8个适用于Android和iOS的文件管理APP
移动设备上的文件管理器是十分常用的APP,它可以帮助您将文档规整得仅仅有条,此外还可以更好地查看设备上使用的空间并容纳最多样化的文件.但是,平台上充斥着各种种类,不同性质,付费和免费的移动端文件管理A ...
- iOS 中文件管理器的使用
援引:https://www.jianshu.com/p/1ee2619137f9 文章之前,我们先来看下本文的知识大纲: ios中文件管理器的使用.png 1.NSFileManager和NSFil ...
- iOS 缓存框架YYCache学习
文章目录 前言 一.YYCache的来源 二.YYCache的结构 1. YYMemoryCache 1.1 最近最少使用-LRU(Least Frequently Used) 1.2 基于LRU的增 ...
- iOS NSFileManager文件管理(沙盒)
OS因为沙盒机制,所以只能访问通讯录.相册和App内的文件,下面就来说说如何进行文件管理. App所产生的数据都存在于自己的沙盒中,一般沙盒都有3个文件:Documents.Library和tmp. ...
- iOS开发-文件管理(一)
一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库 ...
- IOS缓存基本知识和清除缓存的方法
第一. NSURLRequest的缓存设置 - (id)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolic ...
- iOS开发-文件管理
一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库 ...
- 汇总IOS之文件管理
1.文件管理 2.数据处理 3.多线程操作 4.网络.客户端和服务器.json数据解析.协议 5.数据库.coreData 6.项目:本地音乐播放器.天气.letao.诗词 7.开源第三方库:AFNe ...
最新文章
- python数据结构与算法:单向链表
- 我去!一周内,在闲鱼上被疯狂转了2.6万次的架构课程,现在免费!(限时领)...
- python3打开文件的代码_Python3 对文件操作
- 用python做逻辑回归梯度上升_机器学习实例---4.1、Logistic回归基础篇之梯度上升算法...
- 深入理解计算机系统之旅(一)计算机系统漫游
- iOS获取缓存文件的大小并清除缓存
- 已经了关联到svn的文件类型,如何添加到 ignore
- 【mysql必知必会】第十二章 汇总数据
- php开发中常用函数总结,PHP开发中常用函数总结
- [OpenGL] opengl常见问题汇总
- mysql中的自增列和默认字段值为系统时间
- lol云顶之奕助手_云顶之奕小小英雄介绍 除了棋子以外它也很重要!
- 数据结构——>稀疏数组
- 一个完整的软件项目开发流程
- Android 打造万能网络解析框架
- 【论文笔记】递归级联网络(Recursive Cascaded Networks)论文及VTN(Volume Tweening Network)
- LeetCode 592
- win10修改ntp服务器地址,修改win10 ntp服务器地址
- 甲骨文携手各界共庆Java 20周年
- 详细介绍GPIO、I2C、SPI通讯原理以及物理层原理