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

出于安全考虑,iOS系统的沙盒机制规定每个应用都只能访问当前沙盒目录下面的文件(也有例外,比如系统通讯录能在用户授权的情况下被第三方应用访问),这个规则把iOS系统的封闭性展现的淋漓尽致。

一、沙盒中几个主要的目录

每个沙盒下面都有相似的目录结构,如下图所示(出自苹果官方文档):

每个应用的沙盒目录都是相似的,主要包含图中所示的4个目录:

1、MyApp.app

①存放内容

该目录包含了应用程序本身的数据,包括资源文件和可执行文件等。程序启动以后,会根据需要从该目录中动态加载代码或资源到内存,这里用到了lazy loading的思想。

②整个目录是只读的

为了防止被篡改,应用在安装的时候会将该目录签名。非越狱情况下,该目录中内容是无法更改的;在越狱设备上如果更改了目录内容,对应的签名就会被改变,这种情况下苹果官网描述的后果是应用程序将无法启动,我没实践过。

③是否会被iTunes同步

2、Documents

①存放内容

我们可以将应用程序的数据文件保存在该目录下。不过这些数据类型仅限于不可再生的数据,可再生的数据文件应该存放在Library/Cache目录下。

②是否会被iTunes同步

3、Documents/Inbox

①存放内容

该目录用来保存由外部应用请求当前应用程序打开的文件。

比如我们的应用叫A,向系统注册了几种可打开的文件格式,B应用有一个A支持的格式的文件F,并且申请调用A打开F。由于F当前是在B应用的沙盒中,我们知道,沙盒机制是不允许A访问B沙盒中的文件,因此苹果的解决方案是讲F拷贝一份到A应用的Documents/Inbox目录下,再让A打开F。

②是否会被iTunes同步

4、Library

①存放内容

苹果建议用来存放默认设置或其它状态信息。

②是否会被iTunes同步

是,但是要除了Caches子目录外

5、Library/Caches

①存放内容

主要是缓存文件,用户使用过程中缓存都可以保存在这个目录中。前面说过,Documents目录用于保存不可再生的文件,那么这个目录就用于保存那些可再生的文件,比如网络请求的数据。鉴于此,应用程序通常还需要负责删除这些文件。

②是否会被iTunes同步

否。

6、Library/Preferences

①存放内容

应用程序的偏好设置文件。我们使用NSUserDefaults写的设置数据都会保存到该目录下的一个plist文件中,这就是所谓的写道plist中!

②是否会被iTunes同步

7、tmp

①存放内容

各种临时文件,保存应用再次启动时不需要的文件。而且,当应用不再需要这些文件时应该主动将其删除,因为该目录下的东西随时有可能被系统清理掉,目前已知的一种可能清理的原因是系统磁盘存储空间不足的时候。

②是否会被iTunes同步

//获取Documents路径

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

NSString*path=[paths objectAtIndex:0];

NSLog(@"path:%@",path);

//获取Library路径

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES);

NSString*path=[paths objectAtIndex:0];

NSLog(@"path:%@",path);

//获取Caches路径

NSArray*paths=NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);

NSString*path=[paths objectAtIndex:0];

NSLog(@"path:%@",path);

//获取tmp路径

NSString*tmp=NSTemporaryDirectory();

NSLog(@"tmp:%@",tmp);

时间: 2024-10-12 15:04:57

iOS 获取沙盒文件路径及 写入/删除 沙盒文件的相关文章

java 使用递归获取指定文件路径目录,删除指定的文件后缀(可扩展,根据具体需要的删除的后缀进行配置)~~

在工作开发过程中,每次用SVN提交代码全选择的时候,发现会产生很多不需要的文件后缀垃圾文件,感觉挺烦人的,一个一个删太麻烦了,如果产生多种后缀文件时,那删起来多费劲,是吧?想想,就写了一段程序通过递归进行处理,虽然网上有很多这样的代码,但是我感觉都有问题,网上的代码很多都需要拿过来执行一下才知道有没有问题,如果是多层目录结构的时候,会把你的相同文件名称也干掉,而我写的这个即使是需要删除的文件后缀名称跟文件名一样都不会删掉.每次提交之前我都执行一下再提交,这样就不会有哪些不需要的后缀文件了.这个还

Yii2:避免文件路径暴漏,代理访问文件

制作背景:公司要做第三方文件管理系统,客户有时候需要直接访问文件,但是我们又不想暴露文件路径,才有这代理访问 基本功能介绍:读取txt文档.读取图片,如果有需要,可以通过插件读取doc.pdf文档, http://www.yii2.com/uploads/temp/read.bmp是我的真实路径 控制器 <?php /** * Created by PhpStorm. * User: Administrator * Date: 2016/11/24 0024 * Time: 14:38 */ n

Python_Example_文件路径读取返回_文件目录选择文件_实现程序

2018-09-14 Author: 楚格 IDE: Pycharm2018.02   Python 3.7 KeyWord : 文件路径 文件名称选择 Explain:  Testing_Config_List 思路: 1. def Function_Select_File():  获取当前路径(调试中默认路径) 2. 遍历 当前文件夹下的所有文件和文件夹 以供选择使用 3. 拼接字符串 返回有用的路径 4.着重处理了 文件选择部分  方法还可以继续优化 5. code 一步步搭建,注释部分是

创建一个文件夹用于写入UTF-8编码的文件

实现效果: 知识运用: File类的CreateText方法 StreamWriter类的WriteLine方法 实现代码: private void button2_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(textBox1.Text)) { MessageBox.Show("请填写文件路径!"); return; } if (string.IsNullOrEmpty(textBox2.Text)) {

Unity3D研究之支持中文与本地文件的读取写入(转)

前几天有个朋友问我为什么在IOS平台中可以正常的读写文件可是在Android平台中就无法正常的读写.当时因为在上班所以我没时间来帮他解决,晚上回家后我就拿起安卓手机真机调试很快就定位问题所在,原来是他文件的路径写错了.开发中往往一道很难的问题解开的时候发现原来真的非常的简单,哇咔咔. 刚好在MOMO的书中也有涉及到文件的读取与写入,那么本节我将书中的部分内容搬到博客中为大家讲解一下.废话我就不多说了咱直奔主题,创建Text.cs脚本,直接挂在摄像机中.代码中包括:创建文件.读取文件.删除文件.

python读取,写入和更新xml文件

VOC数据集的标注文件都是xml格式,最近需要频繁处理xml文件的读取和更新,整理下python处理xml文件的方法. XML 指可扩展标记语言(eXtensible Markup Language), 被设计用来传输和存储数据.python中有三个模块解析xml文件:DOM, ElementTree,SAX 1. DOM(Document Object Model) DOM是个跨平台的标准模型,W3C定义了DOM模型里的概念.DOM将XML数据在内存中解析成一个树,通过对树的操作来操作XML.

C# 获取程序运行时路径

?  前言 开发中,很多时候都需要获取程序运行时路径,比如:反射.文件操作等..NET Framework 已经封装了这些功能,可以很方便的使用. 1.   可使用类 1.   System.AppDomain,程序集:mscorlib.dll. 2.   System.Environment,程序集:mscorlib.dll. 3.   System.IO.Directory,程序集:mscorlib.dll. 4.   System.Reflection.Assembly,程序集:mscor

一键复制文件路径

有时候我们在上传文件的时候,需要填写文件的完整路径,但是复制文件路径非常麻烦,首先需要复制文件所在 目录的地址,然后再加上文件的完整名称.这么做是非常让人非常不舒服的事,我们需要一个快捷的方式来复制整个文 件的完整路径,方法如下: 首先打开资源管理器,找到需要复制路径的文件或文件夹,接着按住"Shift"键,然后在文件或文件夹上点击 鼠标击键,在弹出的菜单里面选择"复制为路径"命令,这样文件或文件夹的路径就可以复制到剪贴板了,接下来粘贴 到需要的地方就可以了.

php获取json文件数据并动态修改网站头部文件meta信息 --基于CI框架

话不多说了.直接开始吧  (如果有中文.请注意json只认utf-8编码) 首先你需要有一个json文件数据 {        "index": {                 "title": "indexmytitle",                 "keywords": "中文",                 "content": "中文",