iOS_SN_沙盒文件操作及位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS_SN_沙盒文件操作及位置相关的知识,希望对你有一定的参考价值。

转载:http://blog.csdn.net/hello_hwc/article/details/44916909

沙盒的结构如下所示

技术分享


一 访问Bundle

注意Bundle只读,不能写入 
创建一个Plist文件 
技术分享

然后对Plist写入一对Key-value 
技术分享 
然后访问Bundle

1 NSURL * fileInBundle =  [[NSBundle mainBundle] URLForResource:@"demoPlist" withExtension:@"plist"];
2 NSDictionary * dictionary = [NSDictionary dictionaryWithContentsOfURL:fileInBundle];
3 NSLog(@"%@",dictionary.description);

输出Plist的内容

2015-04-07 10:13:14.135 SandboxDemo[669:58884] {
    url = "blog.csdn.net/hello_hwc";
}

二 访问Document

首先介绍两个函数

 1 //在domainMask下搜素directory,返回NSString类型的数组 

 2 NSArray * NSSearchPathForDirectoriesInDomains ( NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde );
 

 1 //在domainMask下搜索directory,返回NSURL类型的数组

2 - (NSArray *)URLsForDirectory:(NSSearchPathDirectory)directory 3 inDomains:(NSSearchPathDomainMask)domainMask 


2.1 我们访问Document,先看看当前有什么东西

 1 NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; 

2 NSLog(@"%@",toStoreURL);
 

输出

2015-04-07 10:38:36.082 SandboxDemo[921:79142] /Users/huangwenchen/Library/Developer/CoreSimulator/Devices/158D1CE6-0444-454B-B248-798726D6BC40/data/Containers/Data/Application/1CD56D62-9370-4FF7-84E3-888A4FD73071/Documents

打开虚拟机的沙盒看看当前有什么,可以看到当前Document的路径下是空的 
技术分享


2.2 往document目录下写入一些东西

1     NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
2     NSString * toStoreURL = [documentsURL stringByAppendingPathComponent:@"demo.txt"];
3     NSString * text = @"welcome to my csdn blog;blog.csdn.net/hello_hwc";
4     BOOL success = [text writeToFile:toStoreURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
5     NSLog(@"%d",success);

 

然后,我们再看下Documents目录,成功的写入了文件 
技术分享


2.3 读document目录

1    NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
2     NSString * toStoreURL = [documentsURL stringByAppendingPathComponent:@"demo.txt"];
3     NSString * string = [[NSString alloc] initWithContentsOfFile:toStoreURL encoding:NSUTF8StringEncoding error:nil];
4     NSLog(@"%@",string);

输出

2015-04-07 11:19:06.264 SandboxDemo[1128:90655] welcome to my csdn blog;blog.csdn.net/hello_hwc

三 Library

3.1 
先看下默认的Library中的内容 
技术分享 
然后,我们尝试写入一个文件

     NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
    NSString * toStoreURL = [documentsURL stringByAppendingPathComponent:@"demo.txt"];
    NSString * text = @"This file is in library dir";
    BOOL success = [text writeToFile:toStoreURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%d",success);

  

再看看目录 
技术分享


读取,代码和Documents十分类似

 NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
    NSString * toStoreURL = [documentsURL stringByAppendingPathComponent:@"demo.txt"];
    NSString * string = [[NSString alloc] initWithContentsOfFile:toStoreURL encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%@",string);

  


3.2 我们再看看,NSUserDefaults存储在哪个目录 
写入NSUSERDefaulsts之前 
技术分享 
用以下代码写入

 NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];
    [defaults setFloat:1.23 forKey:@"FLOAT_KEY"];
    [defaults synchronize];

  

写入之后 
技术分享 
不难看出,写入到了library/Preferences/这个目录里了


四 访问Temp

Temp目录下的文件,app应当在不需要的时候进行删除,系统在App不运行的时候,也可能清理这个目录。 
默认的 
技术分享 
写入Temp

 NSString * tempdir = NSTemporaryDirectory();
    NSString * filedir = [tempdir stringByAppendingPathComponent:@"temp.txt"];
    NSString * message = @"This is in temp dir";
    BOOL success = [message writeToFile:filedir atomically:YES encoding:NSUTF8StringEncoding error:nil];
    NSLog(@"%d",success);

  

技术分享

清理Temp

NSFileManager * defaultmanager= [NSFileManager defaultManager];
    NSArray * tempDir = [defaultmanager contentsOfDirectoryAtPath:NSTemporaryDirectory() error:nil];
    for(NSString * file in tempDir){
        NSString * filepath = [NSTemporaryDirectory() stringByAppendingPathComponent:file];

        [defaultmanager removeItemAtPath:filepath error:nil];
    }

 

技术分享


五 文件应该存放的位置

Documents/ 
这个目录存放用户数据。存放哪些你希望暴露给用户,由用户决定创建,导入,编辑,删除的文件。例如:对于一个文件编辑器的App,那么对应的文本文件存储在这个目录里。对于一个视频App,那么用户的视频文件应当放在这个目录里。


Library/Application support/ 
存放App创建的数据,但是这些数据对于用户来说是透明的。例如CoreData的文件就可以存放在这里


tmp 
存放那些临时文件,不需要再下次登陆的时候再利用的文件。App应当负责在不需要使用的时候清理这些文件,系统会隔一段时间在App不运行的时候清理这个目录。


Library/Caches/ 
存放那些比临时文件生命周期时间长,但是比support文件存在时间短的文件。通常用Cache文件来提高系统性能。例如数据库的cache文件。注意,系统可能会删除这个目录来释放磁盘空间,所以这些文件一定是可再生的。比如浏览器的cache文件,即使被删除了,也仍然能正常进行web访问。

以上是关于iOS_SN_沙盒文件操作及位置的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发之--沙盒的操作

iOS_SN_详解沙河(转载)

iOSiOS数据存储,应用沙盒,XML,Preference,NSKeyedArchiver归档,SQLite3

iOS 获取沙盒文件路径及 写入/删除 沙盒文件

沙盒的 PayPal API 凭据

用于开发/沙盒的 APNs 密钥(.p8 文件)