iOS开发 文件操作 S1 V1

来源:互联网 发布:r数据可视化手册 编辑:程序博客网 时间:2024/05/21 10:50
出处:http://blog.csdn.net/forrest_chen/article/details/7561429

由于iPhone应用程序的沙箱机制,一个运行在iPhone得app,在安装的时候会为其创建一个目录存放其有关的文件夹,该目录下包含有:

1、Appname.app:程序包目录,是一个文件夹,里面包含应用程序本身,程序运行过程中不要对这个目录进行修改,否则会导致程序无法启动;

2、Documents:存放应用程序数据文件和关键的用户文档,所谓关键是因为这些数据不能够被你的应用重新创建,比如user-generated content*。

3、Documents/Inbox:当你的程序被外部访问并打开的时候,外部可以访问该目录的文件*。比如邮件程序将也程序相关的附件存放在该目录下,文件交互控制器也可能把文件存放在该目录下;应用程序可以读取和删除该目录下的文件,但是不能创建新的文件或者写文件。如果用户尝试编辑该目录下的文件,你的应用程序一定会把文件移出该目录*;

4、Library:该目录适用于存放非用户数据文件的顶级目录。可以在该目录下创建子目录,存放需要备份的并不暴露给用户的数据文件;

5、Library/Application Support:存放着除了与用户数据有关的文件的所有应用数据文件。我们可以用这个沐浴露存放应用程序创建的数据文件(data files)、配置文件(configuration files)、模板(templates)或者其他由应用管理的固定或可变的资源文件。比如一个游戏可能会用该目录存放用户购买的新关卡文件。该目录下的所有文件必须再存在在一个子目录中,该子目录的文件名是你的公司名称或者应用程序的 bundle identifier;

6、Library/Caches:该目录应用来存放任何可被应用重新创建的文件。应用程序通常负责管理该目录的内容,并且按需求增加或者删除文件。注意!在iOS5.0以后,系统可能会在系统空间资源紧缺的时候删除掉Caches目录,但这种情况不会出现在应用程序运行过程中。

*7、Library/Frameworks:在MacOS变成中用于存放第三方自定义框架文件。在iOS中,应用程序不能使用自定义框架; 

8、Library/Preferences:这个目录包含应用程序的app-specific preference files。您不应该直接创建这些文件,而是应该使用NSUserDefaults类或CFPreferences API来取得和设置应用程序的偏好;

9、tmp:这个目录用于存放临时文件,保存应用程序再次启动过程中不需要的信息。当您的应用程序不再需要这些临时文件时,应该将其从这个目录中删除(系统也可能在应用程序不运行的时候清理留在这个目录下的文件)。

应用程序文件的存放应该这样:

1、用户数据存放在Documents目录下,这些数据不能被应用程序重新创建,比如用户文件;

2、应用程序下载的或者生成的可以根据需要进行重新创建的文件,对于ios5.0及之前版本,放在Library/Caches目录下保证他们可以被备份;对于ios5.1之后的版本,放置在Library/Application Support目录下,并应用com.apple.MobileBackup拓展属性*,如果文件数目大,可以存在一个子目录中,对子目录设置拓展属性;

3、数据缓存文件存放在/Library/Caches目录下,所谓数据缓存文件(data cache files)比如数据库缓存文件和可下载内容(杂志、新闻和地图应用中的数据*);

4、临时数据存放在tmp目录下,

如果应用程序需要创建数据量大或频繁变化的文件,则应该考虑将它们存储在Application Home/Library/Caches目录下,而不是/Documents目录。备份大数据文件会使备份过程显著变慢,备份频繁变化(因此必须频繁备份)的文件也同样如此。将这些文件放到Caches目录下可以避免每次同步都对其进行备份。

在应用程序中,找到这些文件夹目录使用C函数NSSearchPathForDirectoriesInDomains来查找:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

参数NSDocumentDirectory常量表示需要查找的是/Documents目录:

(NSCachesDirectory表示/Library/Caches目录,NSApplicationSupportDirectory代表/Library/Application Support目录,NSApplicationDirectory代表/Applications目录)

,NSUserDomainMask常量表示目录搜索限制在应用程序的沙箱中,也就是说只是在应用程序分配的根目录下进行搜索,执行结果返回一个数组paths,由于一个应用程序只有一个Documents目录,所以paths的大小肯定为1,如果用户去取index为1的路径(index从0开始)程序报错。
0 0
原创粉丝点击