iOS-沙盒详尽

write主要用于往磁盘目录下写入文件。本篇借write操作也详尽整理一下设备的沙盒目录记忆沙盒目录的操作方法。
沙盒目录下有一下文件夹:

  1. 】 Document:使用此目录存储用户生成的内容。该目录的内容可以通过文件共享提供给用户; 因此,他的目录应该只包含您可能希望向用户公开的文件。
    1.1】Documents/Inbox:使用此目录可以访问外部实体要求您打开应用程序的文件。具体来说,Mail程序会将与您的应用程序关联的电子邮件附件放在此目录中。文档交互控制器也可以在其中放置文件。

该目录的内容由iTunes和iCloud备份。

  1. 】Library: 这是非用户数据文件的任何文件的顶级目录,该文件夹存放不想被用户看到的数据。该文件夹下有两个子目录。
    2.1】 Library/Caches: 保存应用运行时产生的缓存文件,iTunes不会备份,且该目录数据会被清理。
    2.2 】Library/Preferences: 保存应用的偏好设置文件,NSUserDefaults保存的数据,plist文件都放在这里,iTunes 会备份。
  2. 】tmp/ :使用此目录可以编写在应用程序启动之间不需要保留的临时文件。您的应用应该在不再需要时删除此目录中的文件; 但是,当您的应用未运行时,系统可能会清除此目录。
获取文件目录
// 获取沙盒根目录路径
    NSString *homeDir = NSHomeDirectory();
    // 获取Documents目录路径
    NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject];
    
    //获取Library的目录路径
    NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) lastObject];
    
    // 获取cache目录路径
    NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) firstObject];

    // 获取tmp目录路径
    NSString *tmpDir =NSTemporaryDirectory();

/*使用C函数NSSearchPathForDirectoriesInDomains来获得沙盒中目录的全路径。
FOUNDATION_EXPORT NSArray *NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde);  用于查找目录,返回指定范围内的指定名称的目录的路径集合。有三个参数:
1.】NSSearchPathDirectory directory 想要查找的目录类型,是个枚举值。
2.】NSSearchPathDomainMask domainMask 表示“想要从哪个路径区域保护区查找”。
typedef NS_OPTIONS(NSUInteger, NSSearchPathDomainMask) {
   NSUserDomainMask =1,      // 用户的主目录
   NSLocalDomainMask =2,     // 当前机器的本地目录
   NSNetworkDomainMask =4,    //在网络中公开可用的位置
   NSSystemDomainMask =8,    // 被苹果系统提供的,不可更改的位置 (/System)
   NSAllDomainsMask = 0x0ffff  // 上述所有及未来的位置
};
3.】BOOL expandTilde 表示是否用波浪线显示部分目录路径。~在*nix系统表示当前用户的Home目录。列如上面获取cache目录路径如果使用NO,那么结果就是cachesDir=~/Library/Caches
*/
文件写入
1.】拼接生成该目录下的文件
NSString * docFile =[documentDirectory stringByAppendingPathComponent:fileName];
2.】往文件写入数据
2.1】NSData写入文件
[data writeToFile:FileName atomically:YES];
2.2】NSString 写入文件
NSError *error = nil;
   [string writeToFile:docFile atomically:YES encoding:NSUTF8StringEncoding error:&error];
   if (error) {
       NSLog(@"写入文件失败:error = %@",error);
   }else{
       NSLog(@"写入文件成功");
   }
2.3】NSDictionary同上类似。
3.】从文件中读取
NSData *data = [NSData dataWithContentsOfFile: docFile];
NSString *string = [NSString stringWithContentsOfFile:docFile encoding:NSUTF8StringEncoding error:nil];

你可能感兴趣的:(iOS-沙盒详尽)