沙盒机制简介

 iOS应用程序只能在为该程序创建的文件目录下进行文件的读写操作,不可以去其它地方访问,此文件区域被成为沙盒。

iOS应用都有自己的应用沙盒,应用沙盒就是文件系统目录,沙盒对应用程序执行各种操作的规定了区域范围的权限限制  。  


im ios 沙盒文件 ios沙盒环境_沙盒机制

      

特点:         

            1.每个应用程序的活动范围都限定在自己的沙盒里

            2.不能随意跨越自己的沙盒去访问别的应用程序沙盒中的内容

(iOS8已经部分开放访问extension)

            3.在访问别人沙盒内的数据时需要访问权限。

概括:

是一种安全体系的表现

            2.总体来说沙盒就是一种独立、安全、封闭的空间。

            3.非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等。

打开沙盒目录

模拟器沙盒

方法1可以设置显示隐藏文件,然后在Finder下直接打开。设置查看隐藏文件的方法如下:打开终端,输入命令

显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true

隐藏Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool false

Enter键,退出终端,重新启动Finder就可以了
重启Finder:鼠标单击窗口左上角的苹果标志-->强制退出-->Finder-->

方法2这种方法更方便,在Finder上点->前往->前往文件夹,输入/Users/用户名/Library/Developer/CoreSimulator/Devices/EC823725-0694-4879-ADBE-423B7C3DF01F/data/Containers/Data/Application  前往。

沙盒内部文件作用:


im ios 沙盒文件 ios沙盒环境_文件操作_02

 Documents:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录。

                苹果建议将在应用程序中浏览到的文件数据保存在该目录下。

  Library:

                      

在手机备份的时候,iTunes不会备份该目录。

例如音频,视频等文件存放其中

保存应用程序的所有偏好设置iOS的Settings(设置),我们不应该直接在这里创建文件,

而是需要通过NSUserDefault这个类来访问应用程序的偏好设置。

会自动备份该文件目录下的内容。

比如说:是否允许访问图片,是否允许访问地理位置......

  tmp:临时文件目录,在程序重新运行的时候,和开机的时候,会清空tmp文件夹。

手机沙盒 目录路径: /var/mobile/Applications

通过代码打开沙盒

1).获取沙盒的Home目录

NSString *homePath = NSHomeDirectory();

2).获取沙盒的Documents目录

获取Document目录

是在当前沙盒范围内查找

展开路径,NO是不展开

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];

3).获取Library文件路径

获取Library目录

在当前的沙盒范围内查找

展开路径,NO不展开路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];

4).获取Library/Caches文件目录

获取Library/Caches目录

在当前的沙盒范围内查找

展开路径,NO不展开路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *path = [paths objectAtIndex:0];

5).获取Library/Preferences文件目录

Preferences由系统维护,不需要我们手动的获取文件路径进行操作,而是需要借助NSUserDefault来操作,但是我们是可以获取到这个文件的。

获取Library目录

在当前的沙盒范围内查找

展开路径,NO不展开路径

NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,    
                         NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"Preferences"];

6).获取tmp文件路径

向沙盒中读写文件

写入文件

NSArray *array = [NSArray arrayWithObjects:@"write",@"to", @“sandbox”, nil];
   [array writeToFile:filePah atomically:YES];

读取文件

NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePah];

的使用

1.创建目录

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);    
NSString *documentsDirectory = [paths objectAtIndex:0];    
NSFileManager *fileManager = [NSFileManager defaultManager];    
NSString *newDirectory = [documentsDirectory stringByAppendingPathComponent:@“newDirectory”];    
[fileManager createDirectoryAtPath:newDirectory  withIntermediateDirectories:YES attributes:nil error:nil];

2.创建文件

//用全路径创建文件
NSString *myStr = @"写入内容,write String";  
NSString *filePath = [newDirectory stringByAppendingPathComponent:@“newFIle.txt"];  
[FileManager createFileAtPath:filePath contents:[myStr dataUsingEncoding:NSUTF8StringEncoding] 
attributes:nil];  
//更改到待操作的目录下,再创建文件  
[fileManager changeCurrentDirectoryPath:[documentsDirectory stringByExpandingTildeInPath]];  
NSString * fileName = @"newFIle.txt";  
NSArray *array = [[NSArray alloc] initWithObjects:@"hello world”,nil];  
 [fileManager createFileAtPath:fileName contents:array attributes:nil];

3.获取指定文件下所有目录及文件(两个都行) 

NSArray *files = [fileManage subpathsOfDirectoryAtPath: newDirectory error:nil];   
NSArray *files = [fileManage subpathsAtPath: newDirectory ];

4.删除文件

[fileManager removeItemAtPath:@“文件路径” error:nil];

5.写数据

//待写入的数据  
NSString *strTemp = @“hello world”;  
 int intData = 1992;  
 float floatData = 3.4f;  
//创建数据缓冲  
NSMutableData *writer = [[NSMutableData alloc] init];  
//将字符串添加到缓冲中  
[writer appendData:[strTemp dataUsingEncoding:NSUTF8StringEncoding]];     
//将其他数据添加到缓冲中  
[writer appendBytes:&intData length:sizeof(intData)];  
[writer appendBytes:&floatData length:sizeof(floatData)];    
//将缓冲的数据写入到文件中  
[writer writeToFile:filePath atomically:YES];

6.读数据

int intData;  
  float floatData = 0.0;  
NSString *strData;   
NSData *reader = [NSData dataWithContentsOfFile:filePath];  
strData = [[NSString alloc] initWithData:[reader subdataWithRange:NSMakeRange(0, [strTemp length])]  
encoding:NSUTF8StringEncoding]; 
[reader getBytes:&intData range:NSMakeRange([strTemp length], sizeof(intData))];  
 [reader getBytes:&floatData range:NSMakeRange([strTemp length] + sizeof(intData), sizeof(floatData))];