iOS 沙盒机制及文件操作

来源:互联网 发布:linux 怎么写shell脚本 编辑:程序博客网 时间:2024/05/18 09:05

沙盒机制简介

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

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


      

特点:         

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

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

           iOS8已经部分开放访问extension

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

 概括:

            1.是一种安全体系的表现

            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  前往。

沙盒内部文件作用:


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

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

  Library:

              Caches

                       一般存储的是缓存文件,例如图片视频等,此目录下的文件不会再应用程序退出时删除。

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

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

              Preferences

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

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

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

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

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


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


通过代码打开沙盒


1).获取沙盒的Home目录

  NSString *homePath = NSHomeDirectory(); 

2).获取沙盒的Documents目录

    @param NSDocumentDirectory  获取Document目录

    @param NSUserDomainMask     是在当前沙盒范围内查找

    @param YES 展开路径,NO是不展开

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

   NSString *path = [paths objectAtIndex:0];

3).获取Library文件路径

 @param NSLibraryDirectory      获取Library目录

 @param NSUserDomainMask        在当前的沙盒范围内查找 

 @param YES                     展开路径,NO不展开路径 *

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

    NSString *path = [paths objectAtIndex:0];

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

  @param NSCachesDirectory       获取Library/Caches目录

  @param NSUserDomainMask        在当前的沙盒范围内查找 

  @param YES                     展开路径,NO不展开路径 *

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

    NSString *path = [paths objectAtIndex:0];


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

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

 @param NSLibraryDirectory        获取Library目录

 @param NSUserDomainMask          在当前的沙盒范围内查找 

 @param YES                       展开路径,NO不展开路径 *

   NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,    

                        NSUserDomainMask, YES)firstObject]stringByAppendingPathComponent:@"Preferences"];

6).获取tmp文件路径

  NSString *filePath = NSTemporaryDirectory()


向沙盒中读写文件

写入文件

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

  [array writeToFile:filePah atomically:YES];

读取文件

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



iOS NSFileManager 的使用


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))];  

1 0
原创粉丝点击