iOS学习笔记(二十二)————沙盒

/ 0评 / 0

iOS中的文件管理是基于沙盒机制的,沙盒其实就是系统给每个程序分配的一个文件夹,每个程序只能访问自己的沙盒,不能越界访问,所以说iOS系统相对来说是比较安全的,,怎样找到模拟器中的沙盒呢?

查找沙盒路径
1.~/Library
2./User/用户名/Library
3. 因为资源库文件夹是隐藏的,可以通过命令行 来让所有隐藏的文件显示

defaults write com.apple.finder AppleShowAllFiles -bool true
defaults write com.apple.finder AppleShowAllFiles -bool false

在新版的系统中沙盒的路径发生了变化,我们这里只说一下新版的沙盒目录,下面我们来看一下沙盒的目录结构:

sandbox

来看一下获取方法:

- (void)sandBoxTest{
    //获取根目录
    NSString *homePath = NSHomeDirectory();
    NSLog(@"Home目录:%@",homePath);
    
    //获取Documents文件夹目录,第一个参数是说明获取Doucments文件夹目录,第二个参数说明是在当前应用沙盒中获取,所有应用沙盒目录组成一个数组结构的数据存放
    //Documents  保存程序中自己创建的文件(程序中浏览的数据)
    NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsPath = [docPath objectAtIndex:0];
    NSLog(@"Documents目录:%@",documentsPath);
    
    //获取Cache目录
    //caches 存放缓存文件   重启iPhone时不会被清除
    NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [cacPath objectAtIndex:0];
    NSLog(@"Cache目录:%@",cachePath);
    
    //Library目录
    NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
    NSString *libPath = [libsPath objectAtIndex:0];
    NSLog(@"Library目录:%@",libPath);
    
    //temp目录
    //temporary  临时的 存放临时文件  重启时系统会把此文件清空
    NSString *tempPath = NSTemporaryDirectory();
    NSLog(@"temp目录:%@",tempPath);
    
    
    //写入preferences的时候才会出现preferences目录
    //preferences 存放userdefaults 生成的文件(偏好设置)
}

这几个是我们经常操作的沙盒目录下的文件夹,下面我们看一下一般的目录操作,本来Document目录下是不存在Test目录的,我们来创建一个

- (void)fileManagerTest{
    //    文件管理者
    //    单例类
    NSFileManager *fileManager = [NSFileManager defaultManager];
    
    //    创建一个文件夹
    
    //    Directory    目录
    [fileManager createDirectoryAtPath:[self createPath] withIntermediateDirectories:YES attributes:nil error:nil];

    //    fileExistsAtPath  可以用来判断文件夹 或者文件是否存在某个路径下
    if (![fileManager fileExistsAtPath:[[self createPath] stringByAppendingPathComponent:@"aaaa.plist"]]){
        //   创建一个文件
        
        [fileManager createFileAtPath:[[self createPath] stringByAppendingPathComponent:@"aaaa.plist"] contents:nil attributes:nil];
    }

    //    创建临时路径
    NSString *tmp = [NSTemporaryDirectory() stringByAppendingPathComponent:@"aaaa.plist"];
    //    移动文件到指定路径
    [fileManager moveItemAtPath:[[self createPath] stringByAppendingPathComponent:@"aaaa.plist"] toPath:tmp error:nil];
    //    删除某个路径下的文件
    [fileManager removeItemAtPath:tmp error:nil];
}

- (NSString *)createPath{
    //    获得documents的目录
    NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    //   拼接一个新的路径
    NSString *newPath = [documentsPath stringByAppendingPathComponent:@"Test"];

    return newPath;
}

来看一下执行后的效果:

fileManager

这里介绍了两种获取路径的方法,以后可能会常用

   //第一种
    NSArray *docPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
    NSString *documentsPath = [docPath objectAtIndex:0];

    NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [cacPath objectAtIndex:0];
    
    //Library目录
    NSArray *libsPath = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);

     //第二种
     NSString *documentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

     NSString *pathSting = [NSString stringWithFormat:@"%@/Documents",homePath];

代码请查看 http://git.oschina.net/zcb1603999/LearningiOS

评论已关闭。