8.iOS应用的文件目录

作者: Lee丶Way | 来源:发表于2018-03-05 15:47 被阅读9次

Q:iOS应用的文件目录都有哪些?缓存文件放在哪个文件里?

1. 目录结构

沙盒目录

从图中我们可以看到一个应用程序沙盒目录中的文件夹有这么几个:

  • Documents:这个目录用于存储用户数据。该路径可通过配置实现iTunes共享文件。可被 iTunes 同步。
  • Library:该目录下有两个子目录:
    1.Preferences:包含应用程序的偏好设置文件。通过NSUserDefaults这个类来写入,而不是直接创建偏好设置文件。
    2.Caches:用于存放应用程序专用的支持文件,保存应用程序再次启动过程中需要的信息。
    Library目录中,可以创建子文件夹,可以用来存放不希望被用户看到的备份数据。在该路径下的文件夹,除了Caches外,都会被 iTunes 同步。
  • tmp:用来存放应用再次启动时不需要的临时文件,该目录下的东西随时可能被系统清理掉,不会被 iTunes 同步。

2. 获取文件目录路径的方法

// 获取沙盒主目录路径
NSString *homeDir = NSHomeDirectory();
// 获取Documents目录路径
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
// 获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
// 获取Caches目录路径
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
// 获取tmp目录路径
NSString *tmpDir =  NSTemporaryDirectory();

总结

iOS应用的文件目录有DocumentstmpLibraryLibrary中又包含了CachesPreferences
程序的缓存文件存放于沙盒中Library中的Caches目录中。

PS:iOS文件操作

  • 使用NSSearchPathForDirectoriesInDomains创建文件目录
- (void)create{  
    // 使用NSSearchPathForDirectoriesInDomains只能定位Caches、Library、Documents目录,tmp目录不能按照此方法获得  
    NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];  
    NSString *dataFilePath = [docsdir stringByAppendingPathComponent:@"head"]; // 在指定目录下创建 "head" 文件夹  
    NSFileManager *fileManager = [NSFileManager defaultManager];  
    BOOL isDir = NO;  
    // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录  
    BOOL existed = [fileManager fileExistsAtPath:dataFilePath isDirectory:&isDir];  
      
    if ( !(isDir == YES && existed == YES) ) {  
        // 在 Document 目录下创建一个 head 目录  
        [fileManager createDirectoryAtPath:dataFilePath withIntermediateDirectories:YES attributes:nil error:nil];  
    }  
}  
  • 使用 NSHomeDirectory() 创建文件目录
- (void)create{  
    // NSHomeDirectory():应用程序目录, @"tmp/temp":在tmp文件夹下创建temp 文件夹  
    NSString *filePath=[NSHomeDirectory() stringByAppendingPathComponent:@"tmp/temp"];  
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    BOOL isDir = NO;  
      
    // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录  
    BOOL existed = [fileManager fileExistsAtPath:filePath isDirectory:&isDir];  
      
    if ( !(isDir == YES && existed == YES) ) {  
        // 在 tmp 目录下创建一个 temp 目录  
        [fileManager createDirectoryAtPath:filePath withIntermediateDirectories:YES attributes:nil error:nil];  
    }  
}  
  • 其他常用操作
// filePath: 文件/目录的路径
- (void)otherFileManager:(NSString *) filePath {   
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
 
    // 取得一个目录下得所有文件名  
    NSArray *files = [fileManager subpathsAtPath:filePath];  
      
    // 读取某个文件  
    NSData *data = [fileManager contentsAtPath:filePath];  
      
    // 删除文件/文件夹  
    [fileManager removeItemAtPath:filePath error:nil];  
}  

相关文章

  • 8.iOS应用的文件目录

    Q:iOS应用的文件目录都有哪些?缓存文件放在哪个文件里? 1. 目录结构 从图中我们可以看到一个应用程序沙盒目录...

  • 目录结构

    app,应用目录Http,应用文件目录Controllers,控制器文件目录Home,网站(PC)Admin,后台...

  • iOS沙盒解析及操作

    介绍 概念:每个应用拥有自己的应用沙盒,所谓的应用沙盒就是文件系统目录。 沙盒文件目录 沙盒操作 获取应用根目录 ...

  • iOS文件操作

    一、获取沙盒下文件目录 沙盒应用根目录:NSHomeDirectory()是应用程序目录的路径,在改文件目录下有三...

  • thinkphp5.0 目录结构介绍

    TP5目录 application 目录 应用目录,整个应用所有的文件都在这。 application 目录 中...

  • iOS 沙河路径

    沙河路径 每个iOS 应用都有自己的沙盒路径,应用沙盒就是文件系统目录应用沙盒文件目录:应用程序包、Documen...

  • Linux.文件打包和下载

    背景:/opt下有目录fs 应用1:打包fs目录下所有文件为fs.tar。 应用2:打包并压缩fs目录下所有文件为...

  • Linux基础命令

    Linux文件目录 / 根目录 /etc 存放系统和应用程序的配置文件 /usr ...

  • Android文件存储小结

    文件目录分类 属于应用的文件夹: 不属于应用的文件夹: 注意: 带有 cache 的表示缓存文件 属于应用的文件夹...

  • 谈谈ios沙盒机制和数据存储

    iOS为每个应用提供了独立的文件空间,一个应用只能直接访问本应用分配的文件目录,不可以访问其他目录,每个应用自己独...

网友评论

本文标题:8.iOS应用的文件目录

本文链接:https://www.haomeiwen.com/subject/bmqazxtx.html