logo头像

小玉的技术博客

iOS沙盒目录

前言

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

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

    获取应用沙盒目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // 沙盒根路径
    NSString *homePath = NSHomeDirectory();
    // Document路径
    NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    // Library路径
    NSString *libPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) firstObject];
    // temp路径
    NSString *temp = NSTemporaryDirectory();

创建文件目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#pragma mark 使用NSSearchPathForDirectoriesInDomains创建文件目录
- (void)createDir {
NSString * docsdir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *dataFilePath = [docsdir stringByAppendingPathComponent:@"logs"]; // 在Document目录下创建 "logs" 文件夹
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL isDir = NO;
// fileExistsAtPath 判断一个文件或目录是否有效,isDirectory判断是否一个目录
BOOL existed = [fileManager fileExistsAtPath:dataFilePath isDirectory:&isDir];
if (!(isDir && existed)) {
// 在Document目录下创建一个logs目录
[fileManager createDirectoryAtPath:dataFilePath withIntermediateDirectories:YES attributes:nil error:nil];
}
// 在logs下写入文件
NSString *path = [dataFilePath stringByAppendingPathComponent:@"log_01"];
NSString *text = @"log_01_xxxxxxxx";
BOOL writeSuccess = [text writeToFile:path atomically:YES encoding:NSUTF8StringEncoding error:nil];
if (writeSuccess) {
NSLog(@"写入成功");
}
}

删除文件目录下的文件夹及文件夹内的文件

1
2
3
4
5
6
7
- (void)deleteFile {
NSString * dirName = @"logs";//要删除的文件名
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *imageDir = [NSString stringWithFormat:@"%@/%@",docPath, dirName];
NSFileManager *fileManager = [NSFileManager defaultManager];
[fileManager removeItemAtPath:imageDir error:nil];
}
支付宝打赏 微信打赏

赞赏是不耍流氓的鼓励