iOS 沙盒路径/创建文件夹

时间:2022-04-18 22:10:47

iOS 应用目录简介

iOS的沙盒机制,应用只能访问自己应用目录下的文件。iOS不像android,没有SD卡概念,不能直接访问图像、视频等内容。iOS应用产生的内容,如图像、文件、缓存内容等都必须存储在自己的沙盒内。默认情况下,每个沙盒含有3个文件夹:Documents, Library和 tmp。Library包含Caches、Preferences目录。

Documents:应用中用户数据可以放在这里,iTunes备份和恢复的时候会包括此目录
tmp:存放临时文件,iTunes不会备份和恢复此目录,此目录下文件可能会在应用退出后删除
Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除

iOS 获取应用沙盒目录

    // 沙盒根路径
    NSString *homePath = NSHomeDirectory();

    // Document路径
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];

    // Library路径
    NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];

    // temp路径
    NSString *temp = NSTemporaryDirectory();

使用NSSearchPathForDirectoriesInDomains只能定位Caches、Library、Documents目录,而tmp目录,不能按照此方法获得。

创建文件目录

#pragma mark 使用NSSearchPathForDirectoriesInDomains创建文件目录
- (void)createDir {

    NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *dataFilePath = [docsdir stringByAppendingPathComponent:@"archiver"]; // 在Document目录下创建 "archiver" 文件夹

    NSFileManager *fileManager = [NSFileManager defaultManager];

    BOOL isDir = NO;

    // fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
    BOOL existed = [fileManager fileExistsAtPath:dataFilePath isDirectory:&isDir];

    if (!(isDir && existed)) {
        // 在Document目录下创建一个archiver目录
        [fileManager createDirectoryAtPath:dataFilePath withIntermediateDirectories:YES attributes:nil error:nil];
    }

    // 在archiver下写入文件
    NSString *path = [dataFilePath stringByAppendingPathComponent:@"my.txt"];
    NSString *text = @"It's a beautiful day.";
    BOOL writeSuccess = [text writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
    if (writeSuccess) {
        NSLog(@"写入成功");
    }
}