iOS之文件管理(一)—沙盒目录

一,前言 

 ios的沙盒机制,应用只能访问自己应用下的文件。ios应用产生的内容,如图像、文件、缓存内容都必须存储在自己的沙盒内,每个沙盒有3个文件夹:Documents、Library、tmp。

AppName.app 目录:这是应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以您在运行时不能对这个目录中的内容进行修改,否则可能会使应用程序无法启动。

Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,该路径可通过配置实现iTunes共享文件。可被iTunes备份。 

Library/Preferences:存储程序的默认设置或其他状态信息NSUserDefault

Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者关闭后数据的保存,不会被iTunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。

tmp:提供了一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。

二、沙盒目录结构

每个APP的沙盒下面都有相似目录结构,如图(苹果官方文档):

                                                                                                       
图一

 
图二


三, NSSearchPathForDirectoriesInDomains

NSSearchPathForDirectoriesInDomains方法用于查找目录,返回指定范围内的指定名称的目录的路径集合。有三个参数:

** directory**
 NSSearchPathDirectory类型的enum值,表明我们要搜索的目录名称,比如这里用NSDocumentDirectory表明我们要搜索的是Documents目录。如果我们将其换成NSCachesDirectory就表示我们搜索的是Library/Caches目录。
** * domainMask* **
 NSSearchPathDomainMask类型的enum值,指定搜索范围,这里的NSUserDomainMask表示搜索的范围限制于当前应用的沙盒目录。还可以写成NSLocalDomainMask(表示/Library)、NSNetworkDomainMask(表示/Network)等。
** * expandTilde* ** 
BOOL值,表示是否展开波浪线。我们知道在iOS中的全写形式是/User/userName,该值为YES即表示写成全写形式,为NO就表示直接写成“~”。

该值为NO:    

  Caches目录路径    ~/Library/Caches

该值为YES: 

 Caches目录路径    /var/mobile/Containers/Data/Application/E7B438D4-0AB3-49D0-9C2C-B84AF67C752B/Library/Caches

四,获取各种文件目录的路径

  获取沙盒主目录路径
NSString *homeDir = NSHomeDirectory();
  获取Documents目录路径 
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; 
  获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
   获取Caches目录路径 
// 获取tmp目录路径 NSString *t
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; 
mpDir = NSTemporaryDirectory(); 

五,获取应用程序程序包中资源文件路径的方法:

   获取应用程序程序包中资源文件路径
NSLog(@"%@",[[NSBundle mainBundle] bundlePath]);
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"];
UIImage *appleImage = [[UIImage alloc] initWithContentsOfFile:imagePath];
   获取应用程序程序包中Bundle资源文件路径
NSString *bundlePath = [[NSBundle mainBundle] pathForResource:@"GWMEBook" ofType:@"bundle"];
NSString *themeSubPath = [NSString stringWithFormat:@"/Skins/%@/",self.themeName];
NSString *themeFilePath =[bundlePath stringByAppendingString:themeSubPath];
[UIImage imageWithContentsOfFile:[themeFilePath stringByAppendingString:key]]

 

posted on 2018-10-12 22:58  梁飞宇  阅读(768)  评论(0)    收藏  举报