iOS_SN_沙盒文件操作及位置
转载:http://blog.csdn.net/hello_hwc/article/details/44916909
沙盒的结构如下所示
一 访问Bundle
注意Bundle只读,不能写入
创建一个Plist文件
然后对Plist写入一对Key-value
然后访问Bundle
NSURL * fileInBundle = [[NSBundle mainBundle] URLForResource:@"demoPlist" withExtension:@"plist"];
NSDictionary * dictionary = [NSDictionary dictionaryWithContentsOfURL:fileInBundle];
NSLog(@"%@",dictionary.description);
输出Plist的内容
2015-04-07 10:13:14.135 SandboxDemo[669:58884] {
url = "blog.csdn.net/hello_hwc";
}
二 访问Document
首先介绍两个函数
//在domainMask下搜素directory,返回NSString类型的数组 2 NSArray * NSSearchPathForDirectoriesInDomains ( NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde );
//在domainMask下搜索directory,返回NSURL类型的数组
- (NSArray *)URLsForDirectory:(NSSearchPathDirectory)directory inDomains:(NSSearchPathDomainMask)domainMask
2.1 我们访问Document,先看看当前有什么东西
NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]; 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目录下写入一些东西
NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString * toStoreURL = [documentsURL stringByAppendingPathComponent:@"demo.txt"];
NSString * text = @"welcome to my csdn blog;blog.csdn.net/hello_hwc";
BOOL success = [text writeToFile:toStoreURL atomically:YES encoding:NSUTF8StringEncoding error:nil];
NSLog(@"%d",success);
然后,我们再看下Documents目录,成功的写入了文件
2.3 读document目录
NSString * documentsURL = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString * toStoreURL = [documentsURL stringByAppendingPathComponent:@"demo.txt"];
NSString * string = [[NSString alloc] initWithContentsOfFile:toStoreURL encoding:NSUTF8StringEncoding error:nil];
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沙盒机制 iOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. 1 ...
- iOS 沙盒文件操作
//获得document +(NSString *)documentsPath { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDoc ...
- iOS关于沙盒文件拷贝manager.copyItem的一个坑
记录一下: 沙盒文件操作,当需要拷贝文件时,我们可以使用如下类似方式: // 文件拷贝 func copyFile(from:String,to:String)->Bool{ if !manag ...
- iOS开发——数据持久化Swift篇&(二)沙盒文件
沙盒文件 //******************** 5.2 文件操作 func use_FileOperations() { //1.获取程序的Home目录 let homeDirectory = ...
- 【转】【iOS系列】-iOS查看沙盒文件图文教程(真机+模拟器)
原文网址:http://www.cnblogs.com/fengtengfei/p/5090276.html 1:模拟器 1.1 方法1: 程序中打印一下的地址,能直接前往沙盒路径. NSString ...
- iOS 开发查看应用的沙盒文件
在iOS开发中,常常需要将一些信息保存到本地,比如说用户的一些搜索历史等.那么,如何查看所保存的文件呢? 这里介绍两种途径来查看应用的沙盒文件. 方法一:通过Xcode来查看,步骤如下: (1): X ...
- iOS获取真机沙盒文件、获取真机本地数据
有时我们需要对真机内的数据进行分析,那么如何获取沙盒所有数据文件呢? 1.设备连接到电脑,打开xcode 2.打开window-devices 3.打开后,选择设备名,选择app,导出数据 4.最后拿 ...
- 【iOS系列】-iOS查看沙盒文件图文教程(真机+模拟器)
[iOS系列]-iOS查看沙盒文件图文教程(真机+模拟器) 1:模拟器 1.1 方法1: 程序中打印一下的地址,能直接前往沙盒路径. NSString *path = [NSSearchPathFor ...
- iOS NSFileManager对沙盒文件及目录添加删除操作
iOS 使用 NSFileManager对沙盒里面的文件和目录,增加,修改,删除操作: - (void)viewDidLoad { [super viewDidLoad]; self.title = ...
随机推荐
- c笔试题(1)
1.sizeof和strlen的区别 #include<stdio.h> #include<string.h> int main() { char a[10] = " ...
- 网络流——增广路算法(dinic)模板 [BeiJing2006]狼抓兔子
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #in ...
- TransactionScope的正确用法(转自:http://blog.csdn.net/greystar/article/details/1359960)
前一阵贴了一个关于transactionscope的贴子,以为是MS的BUG.后来经过认真仔细的调试,才找到原因. 原来的代码本身是没有没问题的.只是关于事务资源的处理放错了地方.正确的写法应该如下 ...
- 《图解CSS3》——笔记(一)
作者:大漠 勘误:http://www.w3cplus.com/book-comment.html 2014年7月14日14:46:35 第一章 揭开CSS3的面纱 1.1 什么是CSS3 CSS ...
- 有关WCF的契约问题
WCF中的契约包括4种 数据契约 DataContract ->DataMember 服务契约 ServiceContract-> OperactionContract 消息契约 Mess ...
- 关于volatile
也许读者会注意到,端口寄存器的变量使用了volatile 修饰符,这是因为C语言在编译的时候会进行某种优化来提高效率,比如下面这段代码int i = 1;int a = i;int b = i;对于编 ...
- Android之ExpandableListView的属性(Group不展开)
1. 设置ExpandableListView 默认是展开的: 先实例化exListView 然后 exListView.setAdapter(exlvAdapter); //遍历所有group,将 ...
- <php>删除(有内容的)文件夹函数程序
function deldir($dirname) { if(!file_exists($dirname)) {//判断文件夹是否存在 die("文件夹不存在!");//作用等于( ...
- 第35讲 Activity入门和跳转
第35讲Activity入门和跳转 1.Activity Activity是用户接口程序.在Android当中,Activity提供可视化的用户界面,一个Android应用通常由多个activity组 ...
- USB枚举详细过程剖析(转)
USB枚举详细过程剖析(转) 原文地址:http://blog.163.com/luge_arm/blog/static/6774972620071018117290/ 从驱动开发网看到一篇<U ...