SDWebImage框架中在自动做磁盘缓存的过程中,底层实现了计算Cache的大小,框架的方法名称是getSize,但方法不容易被人理解,我就从新写了一下,附带注释

基本思想: 1. 先取出的Cache,获取该文件的路径

2. 利用NSFileManager,取出该文件下的所有子路径返回一个数组

      3.遍历数组,利用文件的fileSize属性,把每个子路径下文件的取出来累加,即为该文件夹的大小

注意: 注意文件夹的隐藏文件,会使得到的文件大小出现偏差

得到的大小为B,若是在苹果手机中,需转化M(需要除去(1000.0 * 1000.0))

// 获取cache文件夹路径

NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];

// 创建文件管理者单粒(要想管理文件,必须使用NSFileManager)

NSFileManager *mgr = [NSFileManager defaultManager];

// 获取文件夹所有子路径数组:获取多级目录下文件路径

NSArray *subpaths = [mgr subpathsAtPath:cachePath];

// 遍历

int totalSize = 0;

for (NSString *subPath in subpaths) {

    //拼接每一条子路径

NSString *filePath = [cachePath stringByAppendingPathComponent:subPath];

// 判断是否是隐藏文件(.DS为苹果中的一种隐藏文件),若是隐藏文件,跳过该次执行,进入下次执行

if ([filePath containsString:@".DS"]) continue;

// 判断是否是文件夹

BOOL isDirectory = NO;

  //如果文件不存在或者为文件夹,就跳过

BOOL isExists = [mgr fileExistsAtPath:filePath isDirectory:&isDirectory];

if (!isExists || isDirectory) continue;

// 获取文件属性(利用文件的fileSize属性)

NSDictionary *attr = [mgr attributesOfItemAtPath:filePath error:nil];

totalSize += [attr fileSize];

iOS中计算磁盘缓存文件夹的大小的更多相关文章

  1. Linux中如何查看文件夹的大小

    直接查看当前文件夹的大小: du –sh 只看文件夹的名字里包含某字符串的子文件夹的大小: du –h –d 1 | grep "BACKEND" 我的linux系统被阉割的比较厉 ...

  2. iOS中计算文件夹中文件大小

    通常用于删除缓存的时,计算缓存大小 //单个文件的大小 - (long long) fileSizeAtPath:(NSString*) filePath{ NSFileManager* manage ...

  3. Linux中统计某个文件夹的大小

    进入这个文件夹内 然后du -sh命令

  4. iOS中计算字符串NSString的高度

    根据固定宽度计算字符串高度: NSString *info = @"但是公司的高度是广东省公司的广东省高速度来开个大帅哥多撒谎个爱好就跟他说噶三公司噶是的刚好是我哥如果黑暗如果坏都干撒降低公 ...

  5. (一一七)基本文件操作 -SDWebImage清除缓存 -文件夹的大小计算

    在iOS的App沙盒中,Documents和Library/Preferences都会被备份到iCloud,因此只适合放置一些记录文件,例如plist.数据库文件.缓存一般放置到Library/Cac ...

  6. 通过Python计算一个文件夹大小

    在进行计算一个文件夹内容大小的时候,我们要考虑文件夹内都有什么内容,可能都是一个一个的单文件,也有可能都是子文件夹,或者二者都有,既然要计算整个文件夹的大小,我们当然要计算每一个文件的大小以及每一个子 ...

  7. 如何在QFileSystemModel中显示文件夹的大小

    在Qt里面,有一种Model/View框架,Model负责收集信息,View负责显示信息.QFileSystemModel可以读取文件大小,但是默认情况下不能读取文件夹大小. QFileSystemM ...

  8. 通过命令“du–sk”, “du–Ask” 的区别,谈谈如何在有保护的文件系统中查看文件或文件夹的大小

    我们都知道,在Windows中,右键单击一个文件或文件夹,选属性(Properties)可以看到这个文件或文件夹的大小.而这个大小是文件的原始大小,即逻辑大小(logical size).即一个1KB ...

  9. Linux中查看各文件夹大小命令:du -h --max-depth=1

    Linux中查看各文件夹大小命令:du -h --max-depth=1 du [-abcDhHklmsSx] [-L <符号连接>][-X <文件>][--block-siz ...

随机推荐

  1. IE跨域访问问题

    可能出现的症状: 1.跨域无法登录. 2.同一页面请求同一域名SESSION无法获取.(SESSION_ID一直在变) 一般情况下在方法前加上以下代码: header("P3P: CP=CU ...

  2. ARP包分析(wireshark)

    ARP数据报格式(42字节) 这是用wireshark抓到的一个ARP包,42个字节. 这个ARP包的 以太网首部(14字节): 字段               长度(Byte)           ...

  3. Thinkphp内置截取字符串函数

    Thinkphp内置了一个可以媲美smarty的模板引擎,给我们带来了很大的方便.调用函数也一样,可以和smarty一样调用自己需要的函数,而官方也内置了一些常用的函数供大家调用. 比如今天我们说的截 ...

  4. 数据库软件dbForge Studio for MySQL更新至v.6.1

    本文转自:慧都控件网 说到MariaDB,这个数据库算是MySQL的一个分支.现在非常的流行,很多地方都能看到它的身影.MariaDB作为一种新的数据库管理系统,在短时间内获得如此高的关注度.这也是D ...

  5. How to create Web Deployment Package and install the package

    Create Web Deployment Package To configure settings on the Connection tab In the Publish method drop ...

  6. Software Project Management hw1

    I just want to say something about my java project that I did last year. Our task is to finish a lin ...

  7. 条件随机场理论分析CRF(Conditional Random Field)

  8. WIN8 隐私声明

    隐私权声明 本应用连接网络仅为控制硬件设备,不会收集你的个人信息,也不共享你个个人信息. 应用名称 CrossMedia可视化控制系统(服务器版) 关于本应用 本应仅为控制设备应用,不关注任何配置相关 ...

  9. C#与C++的区别!

    (1) 编译目标:C++代码经常编译成汇编语言.而C#则编译成中间语言(IL)它与Java的字节代码有些相似.IL随后在通过Iust-In-Time编译进程转换成本机的可执行代码.IL代码将作为一个装 ...

  10. Manifesto of the Communist Party

    A spectre is haunting Europe – the spectre of communism. All the powers of old Europe have entered i ...