声明:该文档是经过自己查找网上的资料以及自己多年的经验后而总结出来的,希望对大家有所帮助,有什么不恰当支出还请大家多指点!

iOS中的沙盒机制(SandBox)是一种安全体系,它规定了应用程序只能在为该应用创建的文件夹内读取文件,不可以访问其他地方的内容。所有的非代码文件都保存在这个地方,比如图片、声音、属性列表和文本文件等。

沙盒(sandbox)的结构:

1、myApp.app

2、documents

3、library

4、tmp

各个目录的作用和是否会被iTunes同步

1、myApp.app

储存内容: 目录包含了应用程序本身的数据,包含资源文件和可执行文件。整个目录是只读的,防止被篡改,,应用被安装时会将该目录签名。
是否会被iTunes同步: 否

2.0、documents

储存内容:存放不可再生数据文件(存储用户数据或其它应该定期备份的信息)
是否会被iTunes同步: 是

2.1、Documents/Inbox

储存数据:用来保存由外部应用请求当前应用程序打开的文件。例如:现有一个应用book.app可以打开txt格式的文件,而在另一个应用BookShop.app有一个a.txt的文件需要用book.app打开,但沙盒机制不允许book直接访问BookShop的沙盒中文件,所以苹果的解决办法是讲BookShop中的a.txt文件拷贝到book中的Documents/Inbox下,再让book打开a.txt。
是否会被iTunes同步:

3.0、Library

储存内容:建议存放默认数据或其他状态信息。
是否会被iTunes同步: 是(不包括Caches子目录)

3.1、Library/Caches

储存内容:主要储存缓存文件,使用过程中的缓存文件可以储存在这里。用于存储体积大可再生的文件。比如网络请求,但一般应用程序要负责清理这些数据。

是否会被iTunes同步: 否

3.2、Library/Preferences

储存内容:储存应用的偏好设置文件,一般我们使用NSUserDefaules写的数据都会存在这个文件的plist文件中。

是否会被iTunes同步: 是

4、tmp

储存内容:各种临时文件,保证再次启动不需要的文件,当应用不再需要这些文件时应该主动将其删除,因为随时可能被系统清理。
是否会被iTunes同步: 否

获取各个目录的方法:

    //获取根目录
NSString *homePath = NSHomeDirectory();
NSLog(@"\n根目录:%@",homePath); //获取documents目录
NSString *docmentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"\n获取Documents目录:%@",docmentPath);
//另一种方式
NSURL *documentURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] firstObject];
NSLog(@"\n获取Documents目录%@",documentURL); //获取Librarys
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"\n获取Libray目录:%@",libraryPath);
//同样另一种方式
NSURL *libraryURL = [[[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] firstObject];
NSLog(@"\n获取Libray目录:%@",libraryURL); //获取Cache目录
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
NSLog(@"\n获取Cache目录:%@",cachePath);
NSURL *cacheURL = [[[NSFileManager defaultManager] URLsForDirectory:NSCachesDirectory inDomains:NSUserDomainMask]firstObject];
NSLog(@"\n获取Cache目录:%@",cacheURL); //temp目录
NSString *tempPath = NSTemporaryDirectory();
NSLog(@"temp目录:%@",tempPath);

实例:

//获取Documents路径

- (NSString *)getDocumentsPath

{

//获取Documents路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *path = [paths objectAtIndex:0];

NSLog(@"path:%@", path);

return path;

}

//创建文件夹

-(void)createDirectory{

NSString *documentsPath =[self getDocumentsPath];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *iOSDirectory = [documentsPath stringByAppendingPathComponent:@"iOS"];

BOOL isSuccess = [fileManager createDirectoryAtPath:iOSDirectory withIntermediateDirectories:YES attributes:nil error:nil];

if (isSuccess) {

NSLog(@"success");

} else {

NSLog(@"fail");

}

}

//创建文件

-(void)createFile{

NSString *documentsPath =[self getDocumentsPath];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];

BOOL isSuccess = [fileManager createFileAtPath:iOSPath contents:nil attributes:nil];

if (isSuccess) {

NSLog(@"success");

} else {

NSLog(@"fail");

}

}

//向文件中写数据

-(void)writeFile{

NSString *documentsPath =[self getDocumentsPath];

NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];

NSString *content = @"我要写数据啦";

BOOL isSuccess = [content writeToFile:iOSPath atomically:YES encoding:NSUTF8StringEncoding error:nil];

if (isSuccess) {

NSLog(@"write success");

} else {

NSLog(@"write fail");

}

}

//读取数据

-(void)readFileContent{

NSString *documentsPath =[self getDocumentsPath];

NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];

NSString *content = [NSString stringWithContentsOfFile:iOSPath encoding:NSUTF8StringEncoding error:nil];

NSLog(@"read success: %@",content);

}

//判断文件是否存在

- (BOOL)isSxistAtPath:(NSString *)filePath{

NSFileManager *fileManager = [NSFileManager defaultManager];

BOOL isExist = [fileManager fileExistsAtPath:filePath];

return isExist;

}

//计算文件的大小

- (unsigned long long)fileSizeAtPath:(NSString *)filePath{

NSFileManager *fileManager = [NSFileManager defaultManager];

BOOL isExist = [fileManager fileExistsAtPath:filePath];

if (isExist){

unsigned long long fileSize = [[fileManager attributesOfItemAtPath:filePath error:nil] fileSize];

return fileSize;

} else {

NSLog(@"file is not exist");

return 0;

}

}

//计算整个文件的大小

- (unsigned long long)folderSizeAtPath:(NSString*)folderPath{

NSFileManager *fileManager = [NSFileManager defaultManager];

BOOL isExist = [fileManager fileExistsAtPath:folderPath];

if (isExist){

NSEnumerator *childFileEnumerator = [[fileManager subpathsAtPath:folderPath] objectEnumerator];

unsigned long long folderSize = 0;

NSString *fileName = @"";

while ((fileName = [childFileEnumerator nextObject]) != nil){

NSString* fileAbsolutePath = [folderPath stringByAppendingPathComponent:fileName];

folderSize += [self fileSizeAtPath:fileAbsolutePath];

}

return folderSize / (1024.0 * 1024.0);

} else {

NSLog(@"file is not exist");

return 0;

}

}

//删除文件

-(void)deleteFile{

NSString *documentsPath =[self getDocumentsPath];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *iOSPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];

BOOL isSuccess = [fileManager removeItemAtPath:iOSPath error:nil];

if (isSuccess) {

NSLog(@"delete success");

}else{

NSLog(@"delete fail");

}

}

- (void)moveFileName

{

NSString *documentsPath =[self getDocumentsPath];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *filePath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];

NSString *moveToPath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];

BOOL isSuccess = [fileManager moveItemAtPath:filePath toPath:moveToPath error:nil];

if (isSuccess) {

NSLog(@"rename success");

}else{

NSLog(@"rename fail");

}

}

//文件重命名

- (void)renameFileName

{

//通过移动该文件对文件重命名

NSString *documentsPath =[self getDocumentsPath];

NSFileManager *fileManager = [NSFileManager defaultManager];

NSString *filePath = [documentsPath stringByAppendingPathComponent:@"iOS.txt"];

NSString *moveToPath = [documentsPath stringByAppendingPathComponent:@"rename.txt"];

BOOL isSuccess = [fileManager moveItemAtPath:filePath toPath:moveToPath error:nil];

if (isSuccess) {

NSLog(@"rename success");

}else{

NSLog(@"rename fail");

}

}

 

 

 
 

iOS 沙盒(sandbox)结构 使用 实例的更多相关文章

  1. IOS学习之IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作(一) 1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都 ...

  2. IOS沙盒(sandbox)机制和文件操作

    IOS学习之IOS沙盒(sandbox)机制和文件操作   作者:totogo2010 ,发布于2012-9-21,来源:CSDN   目录: IOS学习之IOS沙盒(sandbox)机制和文件操作( ...

  3. iOS沙盒目录结构解析

    iOS沙盒目录结构解析 原文地址:http://blog.csdn.net/wzzvictory/article/details/18269713     出于安全考虑,iOS系统的沙盒机制规定每个应 ...

  4. iOS学习之iOS沙盒(sandbox)机制和文件操作1

    iOS学习之iOS沙盒(sandbox)机制和文件操作 接上篇 iOS学习之iOS沙盒(sandbox)机制和文件操作(一) 我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的H ...

  5. IOS 学习之 iOS沙盒(sandbox) 介绍 沙盒机制 文件操作(一)

    1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  6. iOS 沙盒(sandbox)机制和文件操作

    本文参看了 http://www.uml.org.cn/mobiledev/201209211.asp#1 这篇文章中的介绍,尊重原著. 1.IOS沙盒机制 IOS应用程序只能在本应用程序中创建的文件 ...

  7. iOS学习之iOS沙盒(sandbox)机制和文件操作(一)

    1.iOS沙盒机制 iOS应用程序仅仅能在为该改程序创建的文件系统中读取文件,不能够去其他地方訪问,此区域被成为沙盒,所以全部的非代码文件都要保存在此,比如图像,图标,声音,映像,属性列表,文本文件等 ...

  8. iOS学习之iOS沙盒(sandbox)机制和文件操作复习

    1.iOS沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  9. iOS学习7:iOS沙盒(sandBox)机制(一)之获取沙盒路径及目录说明(转)

    转:http://my.oschina.net/joanfen/blog/151145 一.iOS沙盒机制 iOS的应用只能访问为该应用创建的区域,不可访问其他区域,应用的其他非代码文件都存在此目录下 ...

  10. iOS 沙盒目录结构介绍

    iOS系统中,每个应用都有自己的沙盒,且应用只能访问其对应的沙盒目录下面的文件.当然,在用户授权的情况下,应用也可以访问其他目录下面的文件.比如,用户授权情况下,应用可以访问相册.通讯录.在开发中,经 ...

随机推荐

  1. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  2. xampp下创建多个虚拟网站目录

    大家知道,伟大的IIS下面增加多个网站就1分钟搞定.现在换XAMPP下运行多个PHP目录,那我们需要有点探索精神.那么进入正题 首先,下载安装官方最新版本的xampp,地址:点击.记得如果电脑安装有I ...

  3. SpingMVC ModelAndView, Model,Control以及参数传递

    1.web.xml 配置: <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class& ...

  4. Linux手动释放内存

    手动释放内存 1.sync将内存中的缓存写入磁盘 2.  to free pagecache, use echo 1 > /proc/sys/vm/drop_caches;       to f ...

  5. idea添加内存

    在idea安装目录下的以下两个文件: 添加内存:

  6. Linux CentOS6.8下解压安装mysql-5.7.14完整介绍

    环境:centos6.8 32位本教程安装MySQL是通过编译过的二进制文件进行安装.是不针对特定平台的通用安装方法,使用的二进制文件是后缀为.tar.gz的压缩文件1.下载 http://dev.m ...

  7. 施耐德Sepam 40系列备自投逻辑

    1# 主供: VL1= NOT PVTS_1_3 V1 = VL1 AND P59_1_7 AND P59_1_8 AND P59_1_9VL2 = VL1 AND I12 AND I21 AND I ...

  8. Hibernate注解使用以及Spring整合

    Hibernate注解使用以及Spring整合 原文转自:http://wanqiufeng.blog.51cto.com/409430/484739 (1) 简介: 在过去几年里,Hibernate ...

  9. 关于iOS10的允许访问用户数据产生的问题

    不知道这个问题是什么时候出现的,直到我重写项目已应对IPv6的审核. 先前没有加引导页面,打开app直接进入主控制器.当弹出允许访问用户数据窗口的时候,主页面的数据是不加载的. 当用户未允许访问数据之 ...

  10. webApi 导入Excel

    /// <summary> /// 导入 /// </summary> /// <param name="organizationId">< ...