专栏首页清墨_iOS分享iOS开发按时间排序文件

iOS开发按时间排序文件

默认的,我们在开发中,写入沙盒里的文件按文件名排序,如0,1,2,3,4,5,a,b,c,.....z等,但有时候咱们需要将里面的文件按创建时间来排序。这时候,怎么做呢?

NSFileManager中的attributesOfItemAtPath:方法可以获取沙盒内的文件信息,其中就有NSFileCreationDate和NSFileModificationDate两个属性分别代表文件创建时间和修改时间,我们可以比较两个文件的这两个属性,实现按创建时间排序或者按修改时间排序。

NSFileManager *fileMgr = [NSFileManager defaultManager]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *rootPath = [paths objectAtIndex:0];/*获取根目录*/ NSArray *pathsArr = [fileMgr subpathsAtPath:rootPath];/*取得文件列表*/ NSArray *sortedPaths = [pathsArr sortedArrayUsingComparator:^(NSString * firstPath, NSString* secondPath) { NSString *firstUrl = [rootPath stringByAppendingPathComponent:firstPath];/*获取前一个文件完整路径*/ NSString *secondUrl = [rootPath stringByAppendingPathComponent:secondPath];/*获取后一个文件完整路径*/ NSDictionary *firstFileInfo = [[NSFileManager defaultManager] attributesOfItemAtPath:firstUrl error:nil];/*获取前一个文件信息*/ NSDictionary *secondFileInfo = [[NSFileManager defaultManager] attributesOfItemAtPath:secondUrl error:nil];/*获取后一个文件信息*/ id firstData = [firstFileInfo objectForKey:NSFileCreationDate];/*获取前一个文件创建时间*/ id secondData = [secondFileInfo objectForKey:NSFileCreationDate];/*获取后一个文件创建时间*/ return [firstData compare:secondData];//升序 // return [secondData compare:firstData];//降序 }]; //    这样最后得到的sortedPaths就是我们按创建时间排序后的文件,然后我们就可以根据自己的需求来操作已经排序过的文件了,如删除最先创建的文件等: NSEnumerator *e = [sortedPaths objectEnumerator]; NSString *filename; while ((filename = [e nextObject])) { NSRange range = [filename rangeOfString:@"文件后缀.txt"]; if (range.location != NSNotFound) { [[NSFileManager defaultManager] removeItemAtPath:[rootPath stringByAppendingPathComponent:filename] error:NULL];//由于文件夹是升序排列,每次删除都是删最先创建的文件 }

//注意这里写你要停下删除文件的判断出来,比如计算沙盒文件夹里的大小,大小删到一定程度不再删除,不然会把文件全部删除 /* doSomeThing*/ }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • iOS 之-富文本 (NSAttributedString)

    关于富文本能做什么我就不多说了,我们一般遇到的图文混排等,这个还是很好做到的。 好,开讲了: 在讲之前,我们得先明白他的属性和一些方法 1.属性: N...

    清墨
  • OpenGLES-03 使用索引绘制矩形

    这篇文章我们同样借助上篇文章《OpenGLES-02 绘制基本图元(点、线、三角形)》的代码,使用另外一种画法来绘制一个矩形。 修改render方法如下: -(...

    清墨
  • iOS-GCD信号量实现最大并发

    1.实现最大并发数,在iOS里,最容易使用的是NSOperationQueue,如下

    清墨
  • 18.1.25日报

        1)WebPageImpl::paintToMemoryCanvasInUiThread上屏的时候,cef模式是直接getdc贴上去,wke要在CWeb...

    龙泉寺扫地僧
  • AndroidStudio 3.6 中 R.layout 找不到对应的xml文件问题及解决方法

    在新版的AndroidStudio3.6 中,在项目的包下新建 activity 时,一般会同时生成对应的java和xml文件,例如新建 MainActivit...

    砸漏
  • 设计模式- 适配器模式 (Adapter Pattern)

    适配器从结构上可以分为类适配器和对象适配器。其中类适配器使用继承关系来对类进行适配,而对象适配器是使用对象引用的方法来进行适配的。

    易兒善
  • 灰色产业链成病毒传播最大渠道 流量生意或迎来最后的疯狂

    【快讯】劫持浏览器、刷取流量等行为是流氓软件常见行为,而随着安全厂商持续打击、普通用户的安全意识提升,让病毒团伙、流氓软件厂商的获利空间被逐渐压缩。近期,“火绒...

    用户6477171
  • Katana Framework武士刀操作指南

    Katana Framework是用Python语言写的渗透框架,但我更觉得它像是一个工具箱,作者是俄罗斯人,该工具集成以下功能:SQL注入、NMAP系统扫描探...

    FB客服
  • 1.3-Air302(NB-IOT)-新建lua文件和lua文件的变量,函数调用

    2.建一个名字为 load_file.lua   (XXXX.lua)XXXX随意

    杨奉武
  • 消息队列中:消息可靠性、重复消息、消息积压、利用消息实现分布式事务

    可以利用消息队列的有序性来验证是否有消息丢失。在Producer端给每个发出的消息附加一个连续递增的序号,然后在Consumer端来检查这个序号的连续性。如果没...

    搜云库技术团队

扫码关注云+社区

领取腾讯云代金券