在前面三篇关于数据持久化,我们都用涉及到文件(plist文件,数据库文件),它们都是把它们存储在document目录下。iOS的文件机制是沙盒机制,应用只能访问自己应用目录下的文件。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件夹:Documents, Library 和 tmp。Library包含Caches、Preferences目录。

Documents:苹果建议将程序创建产生的文件以及应用浏览产生的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录
Library:存储程序的默认设置或其它状态信息;
Library/Caches:存放缓存文件,保存应用的持久化数据,用于应用升级或者应用关闭后的数据保存,不会被itunes同步,所以为了减少同步的时间,可以考虑将一些比较大的文件而又不需要备份的文件放到这个目录下。
tmp:提供一个即时创建临时文件的地方,但不需要持久化,在应用关闭后,该目录下的数据将删除,也可能系统在程序不运行的时候清除。

我们实际中要如何来或取沙盒,如何在沙盒里面进行相应的操作,下面一一分解。

1.获取app的沙盒根目录

NSString *appRootDir=NSHomeDirectory();
NSLog(@"我的沙盒路径根路径------》: %@",appRootDir);

2.获取Documents目录路径

//第一种
NSString *appRootDir=NSHomeDirectory();
NSLog(@"我的沙盒路径根路径------》: %@",appRootDir);
NSString *documentDir = [appRootDir stringByAppendingPathComponent:@"Documents"];
NSLog(@"documentDir: -----》 %@",documentDir); //第二种
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSLog(@"documentsDirectory: -----》 %@",documentsDirectory);

3.获取Library(包含Caches、Preferences)目录路径:

//第一种
NSString *appRootDir=NSHomeDirectory();
NSLog(@"我的沙盒路径根路径------》: %@",appRootDir);
NSString *documentDir = [appRootDir stringByAppendingPathComponent:@"Library"];
NSLog(@"documentDir: -----》 %@",documentDir); //第二种
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];
NSLog(@"libraryDirectory: -----》 %@",libraryDirectory); //Caches
NSString *cachesPath = [libraryDirectory stringByAppendingString:@"Caches"]; //Preferences
NSString *preferencesPath = [libraryDirectory stringByAppendingString:@"Preferences"]; NSLog(@"cachesPath: -----》 %@",cachesPath);
NSLog(@"preferencesPath: -----》 %@",preferencesPath);

4.获取tmp目录路径:

//第一种
NSString *appRootDir=NSHomeDirectory();
NSLog(@"我的沙盒路径根路径------》: %@",appRootDir);
NSString *documentDir = [appRootDir stringByAppendingPathComponent:@"tmp"];
NSLog(@"documentDir: -----》 %@",documentDir); //第二种
NSString *tmpDirectory = NSTemporaryDirectory();
NSLog(@"tmpDirectory: -----》 %@",tmpDirectory);

5.创建文件(tmp文件夹中)

NSString *tmpDirectory = NSTemporaryDirectory();
NSLog(@"tmpDirectory: -----》 %@",tmpDirectory); NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *testFilePath = [tmpDirectory stringByAppendingPathComponent:@"testFile.txt"];
BOOL res=[fileManager createFileAtPath:testFilePath contents:nil attributes:nil];
if (res) {
NSLog(@"测试文件创建成功: %@" ,testFilePath);
}else {
NSLog(@"测试文件创建失败");
}

6.创建文件夹

NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *testFolderDirectory = [documentsPath stringByAppendingPathComponent:@"Test"];
// 创建目录
BOOL res=[fileManager createDirectoryAtPath:testFolderDirectory withIntermediateDirectories:YES attributes:nil error:nil];
if (res) {
NSLog(@"Test文件夹创建成功");
}else {
NSLog(@"Test文件夹创建失败");
}

7.删除文件

NSString *tmpDirectory = NSTemporaryDirectory();
NSFileManager *fileManager = [NSFileManager defaultManager];
NSString *testFilePath = [tmpDirectory stringByAppendingPathComponent:@"testFile.txt"]; //判断文件是否存在
if ([fileManager fileExistsAtPath:testFilePath]) {
BOOL res=[fileManager removeItemAtPath:testFilePath error:nil];
if (res) {
NSLog(@"testFile文件删除成功");
}else
NSLog(@"testFile文件删除失败");
}

8.写入文件

NSString *tmpDirectory = NSTemporaryDirectory();
NSLog(@"tmpDirectory: -----》 %@",tmpDirectory); NSString *content=@"www.babybus.com SuperDo";
NSString *testFilePath = [tmpDirectory stringByAppendingPathComponent:@"testFile.txt"];
BOOL res=[content writeToFile:testFilePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (res) {
NSLog(@"testFile文件写入成功");
}else {
NSLog(@"testFile文件写入失败");
}

以上是iOS 文件的一些简单常见操作。更多详细内容请参考(https://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/FileSystemOverview/FileSystemOverview.html#//apple_ref/doc/uid/TP40010672-CH2-SW2

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4659923.html

[Objective-C] 013_文件系统(File System)的更多相关文章

  1. 在 Linux 中,最直观、最可见的部分就是 文件系统(file system)

    在 Linux 中,最直观.最可见的部分就是 文件系统(file system).下面我们就来一起探讨一下关于 Linux 中国的文件系统,系统调用以及文件系统实现背后的原理和思想.这些思想中有一些来 ...

  2. 磁盘、分区及Linux文件系统 [Disk, Partition, Linux File System]

    1.磁盘基础知识 1.1 物理结构 硬盘的物理结构一般由磁头与碟片.电动机.主控芯片与排线等部件组成:当主电动机带动碟片旋转时,副电动机带动一组(磁头)到相对应的碟片上并确定读取正面还是反面的碟面,磁 ...

  3. [CareerCup] 8.9 An In-memory File System 内存文件系统

    8.9 Explain the data structures and algorithms that you would use to design an in-memory file system ...

  4. KASS分布式文件系统(Kass File System)

    KASS分布式文件系统(Kass File System),简称KFS,是开始公司自主研发的分布式文件存储服务平台.KFS系统架构及功能服务类似Hadoop/GFS/DFS,它通过HTTP-WEB为上 ...

  5. NFS - Network File System网络文件系统

    NFS(Network File System/网络文件系统): 设置Linux系统之间的文件共享(Linux与Windows中间文件共享采用SAMBA服务): NFS只是一种文件系统,本身没有传输功 ...

  6. HTML5之本地文件系统API - File System API

    HTML5之本地文件系统API - File System API 新的HTML5标准给我们带来了大量的新特性和惊喜,例如,画图的画布Canvas,多媒体的audio和video等等.除了上面我们提到 ...

  7. File System 之本地文件系统

    上一篇文章提到了,最近做一个基于 File System/IndexedDB的应用,上一篇是定额和使用的查询. 因为LocalFileSystem只有chrome支持,有点尴尬,如果按需加载又何来尴尬 ...

  8. [LeetCode] Design In-Memory File System 设计内存文件系统

    Design an in-memory file system to simulate the following functions: ls: Given a path in string form ...

  9. 云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败

    云服务器 linux文件系统异常an error occurren during the file system check导致服务器启动失败 文件系统宕机,重启后报错,无法启动 处理流程: 1.编辑 ...

随机推荐

  1. RF(For 循环)

    一.介绍:RobotFrameWork 支持 FOR 循环语句,语法和 Python 的语法基本相同,但 RobotFrameWork 中,"FOR" 关键字前面需要增加一个 &q ...

  2. 首次使用AWS服务器EC2

    AWS有一年的免费套餐,这个便宜我得占. 申请的时候需要填写银行卡,AWS暂不支持储蓄卡,只好绑信用卡了. 创建EC2实例之后,下一个要解决的问题就是远程root访问. 1. 修改安全组设置 2. s ...

  3. 使用python实现模拟掷骰子数据分析

    Data:2020/4/8 主题:模拟实现掷骰子数据分析 编译环境:pycharm 库:pygal 说明: code 1:创建一个掷骰子类对象,类方法获得掷骰子随机数1-6,默认6个面,模拟20次将结 ...

  4. AntDesignPro的权限控制和动态路由

    最近看了AntDesignPro关于权限控制的官方文档以及自己框架里权限控制的实现,总结一下. 先贴一下官网上关于权限控制的图有利于理解 步骤如下: 判断是否有 AccessToken 如果没有则跳转 ...

  5. (二)Redis在Mac下的安装与SpringBoot中的配置

    1 下载Redis 官网下载,下载 stable 版本,稳定版本. 2 本地安装 解压:tar zxvf redis-6.0.1.tar.gz 移动到: sudo mv redis-6.0.1 /us ...

  6. java读源码之 Queue(ArrayDeque,附图,希望能一起交流)

    除了并发应用(并发包下的代码我之后会专门写),Queue在JavaSE5中仅有的两个实现是LinkedList和PriorityQueue,它们的差异在于排序行为而不是性能.1.6时新增了一个实现Ar ...

  7. Unity2019.3缺少Cinemachine插件/AssetStore搜索不到

    Unity2019.1版本都还自带Cinemachine,到2019.3就没有了(原因暂时未知),PackageManager里没有,到资源商店里搜索也找不到 解决方法: Windows>Pac ...

  8. [hdu4292]最大流,拆点

    题意:给定每个人所喜欢的食物和饮料种类以及每种食物和饮料的数量,一个人需要一种食物和一种饮料(数量为1即可),问最多满足多少人的需要 思路:由于食物和饮料对于人来说需要同时满足,它们是“与”的关系,所 ...

  9. [hdu2222]ac自动机(模板)

    题意:一个文本串+多个模板串的匹配问题 思路:裸的ac自动机. #pragma comment(linker, "/STACK:10240000,10240000") #inclu ...

  10. OpenStack黄金十年:我与OpenStack的故事

    导读:从2010年到2020年,OpenStack项目整整走过了十个春夏秋冬.不管是OpenStack基金会,还是积极参与OpenStack社区的厂商.企业乃至开发者,想必都有肺腑之言想对OpenSt ...