iOS:关于沙盒路径,缓存/视频,存储规则和使用

来源:互联网 发布:php后端开发需要学什么 编辑:程序博客网 时间:2024/06/06 11:35

NSHomeDirectory() 获取到当前APP的沙盒路径..
沙盒路径下有三个文件夹:

(1) temp ->就像命名一样,存放临时文件,在APP关闭再启动后就没有了,不能放重要的东西.

(2) Documents ->除非APP卸载,不然里面东西是不会丢失的,但是也不能存放大文件和下载的东西.在手机连接iTunes备份和iCould备份时会备份此文件夹里面的东西….
(3)Library -> 三个子文件夹-<1>Caches.<2>Cookies.<3>prfereneces

其中,SDWebImage缓存下载的图片就放到了Caches中.我们在网上下载视频/图片的时候也放到这里就OK了..它文件夹名就叫缓存,自然就放缓存咯.

获取Caches路径的方法:

NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject

当然获取各个路径的方法就不写了,这里主要说一下我最近遇到的录制视频,发布到服务器,以及保存所遇到的问题…

录制完视频后我保存到了`NSTemporaryDirectory()`的后面(因为可能不做处理,及时删除),这里打印路径是这样的:  `/private/var/mobile/Containers/Data/Application/8F37E25D-11E2-466F-A491-8D5A8FE11B0C/tmp/myMovie.mov`,会发现,真机里的temp文件夹,路径最前面在/var前面有一个/private..而且在路径末尾会有一个"/",直接拼接"myMovie.mov"..这是跟Documents和Library不同的..然后,我直接将字符串转化为NSURL .将视频保存到这个路径下,发现抛了异常:

也就是说在拼接好路径字符串path之后,在转换为NSURL格式的路径时,一定更要用这个方法:

[NSURL fileURLWithPath:outputFielPath];

这个返回的URL才是异常日志里所说的file URL.这个时候打印这个URL,发现路径是这样的:

file:///private/var/mobile/Containers/Data/Application/3790ED15-F9C2-413D-B91A-7D4A1EC2FA1E/tmp/myMovie.mov
是的,转化为file URL会在原先路径前加了file://所以,你同样也可以用[NSURL urlWithStr:],不过你要在原先字符串上拼接"file://",效果是一样的.

这个”路径”才是用来存储下载或录制的文件的…因为我后面下载的视频在用AFN指定路径的时候没有弄成file URL,导致视频无法使用

这里还要注意的是,我们不能在沙盒下面随意拼接路径,在原有已存在文件夹下面拼接超过一次就意味着你要自己创建一个文件夹了..不然它是不会根据你的/.../...自己创建文件夹..除非自己写一个Cache库或音乐视频类APP,不然好像也用不到创建

创建文件夹链接:http://laiguowei2004.blog.163.com/blog/static/36829000201281753343958/

那么问题来了,既然带有file://的NSURL才是用得上的路径,为什么NSHomeDirectory()不直接带上它?
我们一定还记得从沙盒下删除某些东西…比方说删除原先头像的存储路径

   [[NSFileManager defaultManager] removeItemAtPath:outfilePath error:nil];

这里的AtPath 传的是一个NSString..这种传的则是不带file://的最初拼接的路径.笔者愚拙,因此猜测路径Path字符串 和 NSURL 在存储文件方面是两种概念..不仅仅是简单的格式转换……

总结: (1) NSString * outfilePath = [NSTemporaryDirectory() stringByAppendingString:fileName];
NSURL * filePathURL = [NSURL fileURLWithPath:outfilePath];
return filePathURL;
这是沙盒temp文件下一个filename文件的路径,用于下载或保存视频图片
(2) NSString * outfilePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject] stringByAppendingPathComponent:fileName] ;

 NSURL * filePathURL = [NSURL fileURLWithPath:outfilePath];

这是沙盒下Caches文件夹下的路径,,,和URL格式的路径…需要传字符串的用前面的,要传NSURL的用后面的.

获取沙盒路径下的文件
outfilePath 是带fileName的

  NSURL * filePathURL = [NSURL fileURLWithPath:outfilePath];  NSData *data = [NSData dataWithContentsOfURL:filePathURL];

将一个头像保存到沙盒下 (手动保存一个NSData)
不过大部分的API会只需要传一个URL,它会把数据自己保存到路径下.

 [headerData writeToFile: [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject] stringByAppendingPathComponent:@"headImage.png"] atomically:YES];
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 论文查重表格内容重复怎么办 榕树叶子掉光了怎么办 2017江苏高考2c怎么办 高考刚过三本线怎么办 江苏高考选修有d怎么办 西安地铁卡丢了怎么办 酒后头痛怎么办快速缓解疼痛 孕妇感冒头痛怎么办快速缓解疼痛 投稿后发现文章有错误怎么办 如有一方不同意离婚怎么办 孩子上课时注意力不集中怎么办 幼儿上课时注意力不集中怎么办 孩子读初中不爱读书怎么办 老师需要刺激孩子家长怎么办 错觉视界第11关怎么办 爱逃学的学生老师怎么办 论文投稿发现有错误怎么办 孩子上初中数学物理不好怎么办 火山小视频误踢怎么办 铁棍山药弄到手很痒怎么办 山药皮过敏很痒怎么办 貔貅被家人摸了怎么办? 摸了山药很痒怎么办 山药搞得皮肤痒怎么办 手上弄了山药痒怎么办 老板就是个富二代怎么办 中考准考证密码忘了怎么办 准考证号和密码忘了怎么办 安运继续教育考试不及格怎么办 微信的视频打不开怎么办 公众号被取消了怎么办 合同上不写工资怎么办 已经上班了想考个大专文凭怎么办 微信小程序违规暂停服务怎么办 程序锁密码忘了怎么办 忘了应用锁密码怎么办 毕业后发现论文有错误怎么办 柯丽尔打胶片时胶片卡住了怎么办 闽教英语要收费怎么办 高一学生英语差怎么办 高一英语基础差怎么办