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 缓存文件管理相关推荐

  1. iOS缓存设计(YYCache思路)

    iOS缓存设计(YYCache思路) 前言: 前段时间业务有缓存需求,于是结合YYCache和业务需求,做了缓存层(内存&磁盘)+ 网络层的方案尝试 由于YYCache 采用了内存缓存和磁盘缓 ...

  2. 8个适用于Android和iOS的文件管理APP

    移动设备上的文件管理器是十分常用的APP,它可以帮助您将文档规整得仅仅有条,此外还可以更好地查看设备上使用的空间并容纳最多样化的文件.但是,平台上充斥着各种种类,不同性质,付费和免费的移动端文件管理A ...

  3. iOS 中文件管理器的使用

    援引:https://www.jianshu.com/p/1ee2619137f9 文章之前,我们先来看下本文的知识大纲: ios中文件管理器的使用.png 1.NSFileManager和NSFil ...

  4. iOS 缓存框架YYCache学习

    文章目录 前言 一.YYCache的来源 二.YYCache的结构 1. YYMemoryCache 1.1 最近最少使用-LRU(Least Frequently Used) 1.2 基于LRU的增 ...

  5. iOS NSFileManager文件管理(沙盒)

    OS因为沙盒机制,所以只能访问通讯录.相册和App内的文件,下面就来说说如何进行文件管理. App所产生的数据都存在于自己的沙盒中,一般沙盒都有3个文件:Documents.Library和tmp. ...

  6. iOS开发-文件管理(一)

    一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库 ...

  7. IOS缓存基本知识和清除缓存的方法

    第一. NSURLRequest的缓存设置 - (id)initWithURL:(NSURL *)URL cachePolicy:(NSURLRequestCachePolicy)cachePolic ...

  8. iOS开发-文件管理

    一.iOS中的沙盒机制 iOS应用程序只能对自己创建的文件系统读取文件,这个独立.封闭.安全的空间,叫做沙盒.它一般存放着程序包文件(可执行文件).图片.音频.视频.plist文件.sqlite数据库 ...

  9. 汇总IOS之文件管理

    1.文件管理 2.数据处理 3.多线程操作 4.网络.客户端和服务器.json数据解析.协议 5.数据库.coreData 6.项目:本地音乐播放器.天气.letao.诗词 7.开源第三方库:AFNe ...

最新文章

  1. python数据结构与算法:单向链表
  2. 我去!一周内,在闲鱼上被疯狂转了2.6万次的架构课程,现在免费!(限时领)...
  3. python3打开文件的代码_Python3 对文件操作
  4. 用python做逻辑回归梯度上升_机器学习实例---4.1、Logistic回归基础篇之梯度上升算法...
  5. 深入理解计算机系统之旅(一)计算机系统漫游
  6. iOS获取缓存文件的大小并清除缓存
  7. 已经了关联到svn的文件类型,如何添加到 ignore
  8. 【mysql必知必会】第十二章 汇总数据
  9. php开发中常用函数总结,PHP开发中常用函数总结
  10. [OpenGL] opengl常见问题汇总
  11. mysql中的自增列和默认字段值为系统时间
  12. lol云顶之奕助手_云顶之奕小小英雄介绍 除了棋子以外它也很重要!
  13. 数据结构——>稀疏数组
  14. 一个完整的软件项目开发流程
  15. Android 打造万能网络解析框架
  16. 【论文笔记】递归级联网络(Recursive Cascaded Networks)论文及VTN(Volume Tweening Network)
  17. LeetCode 592
  18. win10修改ntp服务器地址,修改win10 ntp服务器地址
  19. 甲骨文携手各界共庆Java 20周年
  20. 详细介绍GPIO、I2C、SPI通讯原理以及物理层原理

热门文章

  1. 分频器设计中使用行波计数器有何优缺点?
  2. 判断点P是否在三角形ABC内部
  3. 计算机网络 常见网卡信息
  4. Altium Designer 21 关于常用的快捷键
  5. 激活Windows10的简单方法
  6. admob cordova插件 / cordova admob 插件 教程
  7. VideoView分析
  8. 经纬高、ECEF、ENU坐标系相互转换与实现
  9. BI数据库管理RPD配置
  10. C++解析EIT表中的P-F信息