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(@"写入成功");
}
}