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应用的文件目录

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