一道题看懂OC的文件管理:NSFileManager,计算文件包含内存大小
- 计算文件夹下所有文件的大小
// 查看错误信息
__autoreleasing NSError *error;
// 文件管理对象
NSFileManager *manager = [NSFileManager defaultManager];
// 读取路径
NSString *path = @"/Users/Mu/Desktop/copy/17-Copy基本使用(深浅拷贝).mp4";
// 记录内存
double size = 0;
// 获取文件夹属性:内存大小不准确
NSDictionary *dic1 = [manager attributesOfItemAtPath:path error:&error];
// 查看是否出错
// localizedFailureReason:失败原因
// localizedDescription:本地描述信息
// NSLog(@"%@", error.localizedDescription);
// 关键字NSFileSize对应的是占用内存
// NSLog(@"%@", dic1[@"NSFileSize"]);
NSLog(@"----------");
// isDirectory(计算机文件或程序的目录)
BOOL dir = NO;
// 判断文件是否存在,并且是否为文件夹
if ([manager fileExistsAtPath:path isDirectory:&dir]&&dir==YES)
{
// 获取文件夹所有的子文件:存入集合(包括子文件夹)
// - 方法返回值是一个NSArray:NSArray内存储的是NSString
NSArray *singe = [manager subpathsAtPath:path];
// 遍历集合即得到所有的文件名名:不是全部路径
for (NSString *str in singe)
{
// 因为是计算搜文件的大小,所以需要去掉子文件夹:通过判断文件格式即可 [str.pathExtension isEqualToString:@"png"]
// 或者判断其或者是否符合格式 [str hasSuffix:@".png"]
if ([str.pathExtension isEqualToString:@"png"])
{
// 因为得到的是去除掉总文件夹的文件名。因此需要加上文件的路径:占位符格式化
NSDictionary *dic = [manager attributesOfItemAtPath:[NSString stringWithFormat:@"%@/%@", path, str]error:&error];
// 叠加文件的大小
size += [dic[@"NSFileSize"] intValue];
// 打印每一个符合要求的路径
//NSLog(@"%@", str);
}
}
// 打印文件的大小:文件的存储size是B,现在获取的是G
NSLog(@"%f", size/1000/1000/1000);
// 路径为文件
}else
{
// 文件不存在或者文件路径不是文件夹
NSLog(@"文件不存在||不是文件夹");
if(!dir)
{
// 路径是文件,其大小
NSLog(@"%f", [dic1[@"NSFileSize"] floatValue]/1000000000);
}
}
每句代码都有注释,多看看
一道题看懂OC的文件管理:NSFileManager,计算文件包含内存大小的更多相关文章
- NSFileManager计算文件/文件夹大小
在一些软件中,一般都会给用户展现当前APP的内存,同时用户可以根据自己的需要来清除缓存的内容.一般而言,文件夹是没有大小这个属性的,所以需要遍历文件夹的内容来计算文件夹的大小,下面用NSFileMan ...
- 写在最前面 - 《看懂每一行代码 - kubernetes》
我要写什么 <看懂每一行代码 - kubernetes>会包含k8s整个项目的源码解析,考虑到门槛问题,在开始分析k8s之前我会通过一些更低难度的golang开源项目讲解来帮助大家提升go ...
- OC基础 文件管理
OC基础 文件管理 1.文件管理类NSFileManager对象的创建: NSFileManager *fm = [NSFileManager defaultManager]; 2.文件操作: (1 ...
- IOS 看懂此文,你的block再也不需要WeakSelf弱引用了!
前言: 最近都在折腾 Sagit 架框的内存释放的问题,所以对这一块有些心得. 对于新手,学到的文章都在教你用:typeof(self) __weak weakSelf = self. 对于老手,可能 ...
- 小学生都能看懂的数位dp
前言 数位dp其实很久前就知道了,也做过几道和其他算法混在一起的题目,其实通过手玩是能做的 但毕竟是种算法,还是系统学下比较好(节省手玩时间) 模板题 P2602 [ZJOI2010]数字计数 化简题 ...
- 【小白视频学Java for循环】3分钟学会Java的for循环,让看懂for循环嵌套再不是难事
目录 一.单个for循环介绍 二.for循环嵌套 听讲时能听懂的for循环为什么一做题就晕菜?一个for循环还勉强能看懂,但为什么一看到双重for循环脑子里就感觉脑子全是浆糊? 如果有上述问题那么就继 ...
- 从字符串到常量池,一文看懂String类设计
从一道面试题开始 看到这个标题,你肯定以为我又要讲这道面试题了 // 这行代码创建了几个对象? String s3 = new String("1"); 是的,没错,我确实要从这里 ...
- 小刻也能看懂的Unraid系统使用手册:基础篇
小刻也能看懂的Unraid系统使用手册 基础篇 Unraid系统简介 Unraid 的本体其实是 Linux,它主要安装在 NAS 和 All in One 服务器上,经常可以在 Linus 的视频里 ...
- [转]看懂UML类图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...
随机推荐
- Qt::ConnectionType(信号与槽的传递方式)
Qt::AutoConnection 自动连接:(默认值)如果信号在接收者所依附的线程内发射,则等同于直接连接.如果发射信号的线程和接受者所依附的线程不同,则等同于队列连接. Qt::DirectCo ...
- asp.net html table to DataTable
添加引用 http://htmlagilitypack.codeplex.com/downloads/get/437941 protected void Export(string content,s ...
- include和 merge
include和merge标记的作用主要是为了解决layout的重用问题. 比如我们有三四个Activity但是他们都要用到同一个样式的标题栏,虽然我们把一样的代码copy个三四遍也没关系,但实在是太 ...
- Update Case的用法与execute执行字符串
摘自于网路:http://www.cnblogs.com/joinger/articles/1297160.html update h_crm_SafetyAccessUser set ...
- Java Concurrent Topics
To prevent Memory Consistency Errors(MCEs), it is good practice to specify synchronized class specif ...
- HALF<水题>
题意: 找出n/d=0.5的所有数.输入:test,x(代表n的位数,1<=x<=4).并且n和d的每一个位数不能有重复,也不能是0. 输入: 1 1 输出: the form 1/2 = ...
- ReactiveX序列——RxSwift 浅析
ReactiveX序列——RxSwift Swift是苹果公司新推出的一门现代化的编程语言,并且将其开源出来了,Swift具有很多的优点,这也使得这门语言推出的短时间引起了很大反应的原因,在最近的 ...
- IOS 使用动态库(dylib)和动态加载framework
在iphone上使用动态库的多为dylib文件,这些文件使用标准的dlopen方式来使用是可以的.那相同的在使用framework文件也可以当做动态库的方式来动态加载,这样就可以比较自由的使用appl ...
- 编译Android各种错误
第一次编译成功,第二次出现Value for 'keystore' is not valid. It must resolve to a single path 打开proj.android\ant. ...
- LightOJ 1234 Harmonic Number 调和级数部分和
题目链接:http://lightoj.com/volume_showproblem.php?problem=1234 Sample Input Sample Output Case : Case : ...