iOS的沙箱目录和文件操作
一、沙箱
iOS的每一个应用程序都有自己的目录来存放数据,这个目录称为沙箱目录。沙箱目录是一种数据安全策略,它设计的原理是只能允许自己的应用访问目录,而不允许其他的应用访问,这样可以保证数据的安全,应用之间是不能共享数据的。
一些特有的应用(如通讯录)需要特定的API才能共享数据。
下面简单介绍一下,应用程序的沙箱目录,先直观的看一下演示程序的沙箱目录结构。

该应用程序的沙箱路径为:
/Users/"用户名"/Library/Developer/CoreSimulator/Devices/8DFE7883-956E-41E3-B099-18C92609E027/data/Containers/Data/Application/E82B708D-B06C-4837-BA59-74EE22CA7BE4
我们可以看到,该沙箱目录有三个子目录,分别为Documents,Library,tmp
1、Documents
该目录用于存储非常大的文件或需要非常频繁更新的数据,能够进行iTunes或iCloud备份。该目录是只有一个元素的数组,因此获取该目录位置的代码如下:
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
2、Library

该目录下面有 Preferences和Caches两个子目录,Preferences用于存放应用程序的设置数据,能够进行iTunes或iCloud备份;Caches主要用来存放应用的缓存文件,iTunes不会备份。
获取Library目录位置的代码如下:
NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
获取Preferences目录位置的代码如下:
NSString *preferencePath = [NSSearchPathForDirectoriesInDomains(NSPreferencePanesDirectory, NSUserDomainMask, YES) lastObject];
获取Caches目录位置的代码如下:
NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];
3、tmp
该目录是用来存放临时文件的,它不能够进行iTunes或iCloud备份。用户可以访问它,获取该目录的代码如下:
NSString *tmpPath = NSTemporaryDirectory();
二、文件操作
1、创建文件夹
我们在documents目录下创建test文件夹
NSString *documentPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@"document文件夹路径为%@",documentPath); NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *testPath = [documentPath stringByAppendingPathComponent:@"test"];
BOOL isSuccess = [fileManager createDirectoryAtPath:testPath withIntermediateDirectories:YES attributes:nil error:nil];
NSLog(@"成功创建文件夹了吗:%@",isSuccess?@"yes":@"no");
创建成功

2、创建文件
接着上面的代码,我们在test文件夹下创建文件test.txt
NSString *txtPath = [testPath stringByAppendingPathComponent:@"test.txt"];
BOOL isTxtSuccess = [fileManager createFileAtPath:txtPath contents:nil attributes:nil];
NSLog(@"成功创建文件了吗:%@",isTxtSuccess?@"yes":@"no");
创建成功

可以看到test.txt还是空的,下面我们写入数据。
3、写数据到文件
NSString *testString = @"Hello WorldiOS的沙箱目录和文件操作的更多相关文章
- Linux 目录和文件操作
Linux常用命令--目录和文件操作 [目录]删除.复制.移动 : 1.删除文件夹用:rmdir 文件夹名 但是rmdir不能删除非空的文件夹,那如何删除非空文件夹呢: 2.通常情况下,删除文件用:r ...
- [Python] 目录和文件操作
在Linux系统下用Python写脚本,肯定不能避免各种与目录和文件夹有关的操作.为了以后方便查阅,简单地针对Python中与目录和文件夹有关的操作进行汇总. 需要实现导入的模块为: import o ...
- php 目录及文件操作
// bool is_dir(string $filename) 判断给定文件名是否是一个目录.// resource opendir(string $path[,resource $context] ...
- PHP - 目录、文件操作
目录操作: <?php /** * Read Directory. * Just read the top-level directory. * @param string $path dire ...
- python目录和文件操作
一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 要操作目录,必须引入os模块 import os1.得到当前工作目录,即当前Python脚本工作的目录路径: os ...
- Linux命令应用大词典-第4章 目录和文件操作
4.1 pwd:显示(打印)当前工作目录路径 4.2 cd:更改工作目录路径 4.3 ls: 列出目录和文件信息: 4.4 dir:列出目录或文件信息: 4.5 dirs:显示目录列表: 4.6 to ...
- R 目录及文件操作
获取当前路径 getwd() 切换当前路径 setwd() 返回上一级目录 setwd(dirname(getwd())) 获取文件所在路径 dirname() 查看当前目录的子目录 lis ...
- Python目录与文件操作
一.判断一个路径是否存在 os.path.exists(path) 如果路径存在则返回True,否则返回False. import os import getpass # 获取当前系统用户名 user ...
- [python]目录及文件操作
Python OS模块和shutil模块 获取路径 # 获取当前路径 pwd = os.getcwd() # 获取上级路径 a_pwd = os.path.abspath(os.path.dirnam ...
随机推荐
- Android——设计原则(Design Principles)
Enchant Me Delight me in surprising ways(动画.音效...) Real objects are more fun than buttons and menus( ...
- Codeforces Round #333 (Div. 1) B. Lipshitz Sequence 倍增 二分
B. Lipshitz Sequence Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/601/ ...
- flash 入门课知识小结
一. 几种类型帧的小结:(关键帧.空白关键帧.普通帧)1. 特点 帧——是进行flash动画制作的最基本的单位,每一个精彩的flash动画都是由很多个精心雕琢的帧构成的,在时间轴上的每一帧都可以包含 ...
- cc代码学习笔记1
#define #define INT32 int #define INT8 char #define CHAR char #define SSHORT signed short #define IN ...
- debian防火墙firestarter
Firestarter是一个非常好用的防火墙图形化配置工具,作者和开发者是芬兰人. 首先肯定的说Firestarter防火墙是一款非常优秀的基于GUI图形用户界面下的,完全免费的自由软件,它为中小型L ...
- VS2010打开就自动关闭问题解决
前段时间开发没有使用VSS,打开项目一直正常,后来嵌入到VSS后出现了VS2010打开后就自动关闭的问题. 刚开始我重新卸载.安装了VS2010,但是还是有问题,后来重新创建了空解决方案,再次引入就正 ...
- SQLite数据库中获取新插入数据的自增长ID
SQLite数据库中有一有列名为ID的自增列,项目需求要在向数据库在插入新数据的同时返回新插入数据行的ID. 我这里用事务,把插入和查询语句通过ExecuteReader一起提交,返回DbDataRe ...
- 你真的会用UITableView嘛
UITableView是工程开发中最经常使用到的UI控件,但是你真的了解它嘛,这里记录几点有用的但你可能并不知道的. 当我们的数据未能显示满一屏幕的时候,UITableView会显示多余的横线,这个时 ...
- The method load(Class, Serializable) in the type HibernateTemplate is not applicable for the arguments (Class, int)
引入别人的项目发现利用HibernateTemplate的load的方法报错了.错误提示为: The method load(Class, Serializable) in the type Hibe ...
- html/css 两个div在同一行
在界面设计的时候,经常需要将两个div在同一行显示. 但是每次都会忘记怎么做,特此随笔,备忘. 如以下要将“第一个div”和“第二个div”显示在同一行: <div id="id1&q ...