iPhone开发之沙盒路径的获取

1、沙盒机制以及获取沙盒路径
2、沙盒的基本概念和作用
每个IOS程序都有自己的应用沙盒,应用沙盒就是文件系统目录,与其它应用的文件系统相隔离。IOS系统不允许访问其他应用的应用沙盒。在IOS8中已经开放访问。
3、即IOS8中允许沙盒目录中的一部分东西让其它软件访问。
4、应用沙盒一般包括以下几个文件目录:应用程序包、Documents、Library(下面有Caches和Preferences目录)、temp

应用程序包:包含所有的资源文件和可执行文件
Documents:保存应用运行时生成的需要持久化的数据,iTunes会自动备份该目录。苹果建议将程序中建立的或在程序中浏览的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录。

temp:应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也有可能清除该目录下的文件,iTunes不会同步该目录。iPhone重启时,该文件下的目录会丢失。

Library:存储程序中的默认设置和其他状态信息,iTunes会自动备份该目录。

Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下的文件不会在应用退出删除。一般存放体积比较大,不是特别重要的资源。

Library/Preferences: 保存应用的所有偏好设置,IOS的Setting(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。Preferences是一个关系数据库,功能非常强大。
即Preferences  配置信息\SQLite

5、沙盒路径获取的方法:
(1)沙盒路径
(2)Documents 路径
(3)tmp 路径
(4)Library  路径

6、获取目录路径的方法
(1)获取沙盒根目录
在mac下获取的是用户的根目录
在IOS程序下是沙盒总目录即根目录所在的路径
NSString  *sandBoxPath = NSHomeDirectory();
NSLog(“sandBoxPath = %@”,sandBoxPath);
(2)获取绝对路径的方法
NSSearchPathForDirectoriesInDomains返回一个绝对路径用来存放我们需要储存的文件
NSSearchPathForDirectoriesInDomains(要查找的目录,查找范围是否在用户主目录,YES/NO 是否获取全路径);
第一个参数:要获取的沙盒文件夹名称
NSDocumentDirectory 表示获取沙盒的Documents目录
第二个参数:(表明在那个范围内寻找此文件夹)
NSUserDomainMask = 1 //用户主目录中
NSLoaclDomainMask = 2 // 当前机器中
NSNetworkDomainMask =4 // 网络中可见的主机
NSSystemDomainMask = 8  //系统目录不可修改 (/system)
NsAllDomainMask = 0xffff   //全部
第三个参数:YES/NO 是否获取全路径


此函数返回一个数组即返回一个NSArray类型的值
(因为在查找的范围内可能出现多个要查找同名文件夹),一般只有一个放在index为0的一项

7、具体获取如下:
(1)获取Document目录:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)
NSString *path = [paths  objectAtIndex:0];
(2)获取Cache目录:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
NSString *path = [paths objectAtIndex:0];
(3)获取Library目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);
NSString *path = [paths objectAtIndex:0];
(4)获取tmp目录:
NSString *tmpDir = NSTemporaryDIrectory();
8、最常见的用法:
NSArray *arrs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
// 在document目录下构建新的路径
NSString *path = [[arrs lastObject] stringByAppendingPathComponent:@“test/a.txt”];

NSLog(@“path:”,path);

新建工程  代码验证一一如下:
编辑控制器的.m文件如下:

//
//  ViewController.m
//  沙盒解析
//
//  Created by apple on 15/9/18.
//  Copyright (c) 2015年 LiuXun. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 获取沙盒的根目录
//    NSString *sandBox = NSHomeDirectory();
//    NSLog(@"SandBoxPath = %@",sandBox);
    
    //  获取Document路径
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//    NSString *path = [paths objectAtIndex:0];
//    NSLog(@"%@",paths);
//    NSLog(@"DocumentPath = %@ ",path);
    
    //获取缓存文件夹Cache目录
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
//    NSString *path = [paths objectAtIndex:0];
//    NSLog(@"%@",paths);
//    NSLog(@"Caches = %@",path);
    
    //获取库Library的目录
//    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
//    NSString *path = [paths  objectAtIndex:0];
//    NSLog(@"%@",paths);
//    NSLog(@"LibraryDirectory = %@",path);
    
    // 获取tmp目录如下:
//    NSString *tmpDir = NSTemporaryDirectory();
//    NSLog(@"temporaryDirectory = %@ ", tmpDir);
    
    // ========================================================
    // 在Document目录下创建文件夹
    NSArray *arrs = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   // 在Document目录下构建新的路径
  //    NSString *path = [[arrs lastObject] stringByAppendingPathComponent:@"test/a.txt"];
    NSString *path = [[arrs lastObject] stringByAppendingPathComponent:@"test/b.plist"];
    NSString *directory; //路径或文件所在路径
     // 利用NSFileManager创建路径
    NSFileManager *manager = [NSFileManager defaultManager];
    
    BOOL isDir;
    [manager fileExistsAtPath:path  isDirectory:&isDir];
    if (isDir) {  // 如果不是一个目录
        NSLog(@"不是一个目录而是一个文件");
         directory = [path stringByDeletingLastPathComponent]; // 删除文件最后一部分获取文件所在路径
    }else
    {
        directory = path;
    }
    
    BOOL createYES;
    if (![manager fileExistsAtPath:path]) {  // 判断如果文件所在路径不存在
        NSLog(@"目录或文件所在路径不存在");
      createYES = [manager createDirectoryAtPath:directory withIntermediateDirectories:YES attributes:nil error:nil];
        if (createYES) {
            NSLog(@"文件目录创建成功");
        }
        else
        {
            NSLog(@"文件目录创建失败");
            return ;
        }
    }
    NSLog(@"%@",directory);
    
    // 路径创建成功,开始创建文件  方式有很多种  在此用NSFileManager对象创建
   // NSString *content=@"床前明月光,疑是地上霜。\n举头望明月,低头思故乡。";
   //  NSData *data = [content dataUsingEncoding:NSUTF8StringEncoding];
   //  BOOL isSucCreateFile = [manager createFileAtPath:path contents:data attributes:nil];
     BOOL isSucCreateFile = [manager createFileAtPath:path contents:nil attributes:nil];
    if (isSucCreateFile) {
        NSLog(@"文件创建成功");
    }
    else
    {
        NSLog(@"文件创建失败");
    }
    NSDictionary *dict = @{@"name":@"LiuXun",@"QQ":@"2652790899"};
    if ( [dict writeToFile:path atomically:YES]) {
        NSLog(@"文件写入成功");
    }
    
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    
}

@end
运行结果一一如下:

1


1.1



2



2.1


3


3.1


4

iPhone开发之沙盒路径的获取_第1张图片


4.1

iPhone开发之沙盒路径的获取_第2张图片

5


5.1


6

iPhone开发之沙盒路径的获取_第3张图片

6.1


7


iPhone开发之沙盒路径的获取_第4张图片


你可能感兴趣的:(iPhone开发之沙盒路径的获取)