iOS沙盒路径记录
程序员文章站
2024-03-24 19:17:10
...
1、沙盒路径
(1)获取沙盒主目录路径
NSString * homeDirectory = NSHomeDirectory();
(2)获取Documents目录路径
用户创建的数据,或者不能重新生成的数据。
应该存放在/Documents目录下,并且不应该标记为"do not backup"属性。
关键数据在低存储空间时也会保留,而且会被iCloud或iTunes备份。
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
或者
NSString *cachesPath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];
(3)获取Library的目录路径
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
(4)获取Caches目录路径
可以重新下载或生成的数据,而且没有这些数据也不会妨碍用户离线使用应用的功能。
缓存数据应该保存在/Library/Caches目录下。
缓存数据在设备低存储空间时可能会被删除,iTunes或iCloud不会对其进行备份。
系统的缓存都放在这个文件夹下面(主要是网路).
当访问网络时系统自动会把访问的url,以数据库的方式存放在此目录下面.
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
(5)获取tmp目录路径
应用需要写到本地存储,内部使用的临时数据,但不需要长期保留使用,系统可能会清空该目录下的数据,iTunes或iCloud也不会对其进行备份。
应用在不需要使用这些数据时,应该尽快地删除临时数据,以避免浪费用户的存储空间。
NSString *tmpDir = NSTemporaryDirectory();
(6)SystemData
新加入的一个文件夹, 存放系统的一些东西,暂时没研究其用法,有兴趣的同学可以研究其储存规则.
2、层级关系图
3、之前写过的文件夹操作
#pragma mark Tem目录下操作
/*******************************************下载文件到沙盒tem文件下****************************************/
-(void)temDownPackageWithUrl:(NSString *)url toPath:(NSString *)temPath fileName:(NSString *)fileName progress:(void (^)(NSString * progress))progress success:(void (^)(NSString *filePath))success fail:(void (^)(id error))fail
{
NSString *temStr=nil;
if (temPath) {
[self temCreatPathWithPath:temPath];
temStr=[NSString stringWithFormat:@"%@/%@",temPath,fileName];
}
else
{
temStr=[NSString stringWithFormat:@"%@",fileName];
}
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:url];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress *downloadProgress){
progress([NSString stringWithFormat:@"%.1f",100.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount]);
} destination:^NSURL *(NSURL *targetPath, NSURLResponse *response) {
NSString *path=[self temPathWithPath:temStr];
return [NSURL fileURLWithPath:path];
} completionHandler:^(NSURLResponse *response, NSURL *filePath, NSError *error) {
if (error == nil) {
success([filePath path]);
}else{
fail(error);
}
}];
[downloadTask resume];
}
/*******************************************解压到tem文件夹****************************************/
- (BOOL)temUnzipFileAtPath:(NSString *)path toTemDestination:(NSString *)destination
{
NSString *cacheStr=[self temPathWithPath:destination];
return [SSZipArchive unzipFileAtPath:path toDestination:cacheStr];
}
/*******************************************从tem解压到tem文件夹****************************************/
- (BOOL)temUnzipFileAtPathFromTem:(NSString *)path toTemDestination:(NSString *)destination
{
NSString *cacheStr=[self temPathWithPath:path];
NSString *cacheStr2=[self temPathWithPath:destination];
return [SSZipArchive unzipFileAtPath:cacheStr toDestination:cacheStr2];
}
/*******************************************打印tem目录下路径文件****************************************/
-(void)temNslogPath:(NSString *)path
{
NSString *cacheStr=[self temPathWithPath:path];
NSFileManager * defaultManager = [NSFileManager defaultManager];
NSError *err = nil;
NSArray *contensArr= [NSArray arrayWithArray:[defaultManager contentsOfDirectoryAtPath:cacheStr error:&err]];
NSLog(@"路径地址:%@",cacheStr);
NSLog(@"路径下文件:%@",contensArr);
}
/*******************************************从mainBundle拷贝文件到tem****************************************/
-(void)temCopyFromMainBundle:(NSString *)bundlePath withType:(NSString *)type toPath:(NSString *)temPath fileName:(NSString *)fileName
{
NSString *temStr=nil;
if (temPath) {
[self temCreatPathWithPath:temPath];
temStr=[NSString stringWithFormat:@"%@/%@",temPath,fileName];
}
else
{
temStr=[NSString stringWithFormat:@"%@",fileName];
}
NSString *strResourcesBundle = [[NSBundle mainBundle] pathForResource:bundlePath ofType:type];
NSString *cacheStr=[self temPathWithPath:temStr];
NSFileManager * defaultManager = [NSFileManager defaultManager];
NSError *err = nil;
[defaultManager copyItemAtPath: strResourcesBundle toPath:cacheStr error: &err];
if(err){
NSLog(@"复制初始资源文件出错:%@", err);
}
else{
NSLog(@"复制文件到路径:%@", cacheStr);
}
}
/*******************************************从tem拷贝文件到tem****************************************/
-(void)temCopyFrom:(NSString *)temPath0 withType:(NSString *)type toPath:(NSString *)temPath1 fileName:(NSString *)fileName{
NSString *temStr=nil;
if (temPath1) {
[self temCreatPathWithPath:temPath1];
temStr=[NSString stringWithFormat:@"%@/%@",temPath1,fileName];
}
else
{
temStr=[NSString stringWithFormat:@"%@",fileName];
}
NSString *strResourcesBundle = [self temPathWithPath:temPath0];
NSString *cacheStr=[self temPathWithPath:temStr];
NSFileManager * defaultManager = [NSFileManager defaultManager];
NSError *err = nil;
[defaultManager copyItemAtPath: strResourcesBundle toPath:cacheStr error: &err];
if(err){
NSLog(@"复制初始资源文件出错:%@", err);
}
else{
NSLog(@"复制文件到路径:%@", cacheStr);
}
}
/*******************************************从tem移动文件到tem****************************************/
-(void)temMoveFrom:(NSString *)temPath0 withType:(NSString *)type toPath:(NSString *)temPath1 fileName:(NSString *)fileName{
NSString *temStr=nil;
if (temPath1) {
[self temCreatPathWithPath:temPath1];
temStr=[NSString stringWithFormat:@"%@/%@",temPath1,fileName];
}
else
{
temStr=[NSString stringWithFormat:@"%@",fileName];
}
NSString *strResourcesBundle = [self temPathWithPath:temPath0];
NSString *cacheStr=[self temPathWithPath:temStr];
[self temRomoveFileWithPath:temStr];
NSFileManager * defaultManager = [NSFileManager defaultManager];
NSError *err = nil;
[defaultManager moveItemAtPath: strResourcesBundle toPath:cacheStr error: &err];
if(err){
NSLog(@"复制初始资源文件出错:%@", err);
}
else{
NSLog(@"复制文件到路径:%@", cacheStr);
}
}
/*******************************************删除沙盒中的文件****************************************/
-(void)temRomoveFileWithPath:(NSString *)path
{
NSString *cacheStr=[self temPathWithPath:path];
NSError *err = nil;
[[NSFileManager defaultManager] removeItemAtPath:cacheStr error:&err];
if(err){
NSLog(@"删除文件出错:%@", err);
}
else{
NSLog(@"删除文件到路径:%@", cacheStr);
}
}
/*******************************************判断文件是否存在****************************************/
-(BOOL)temIsFileExist:(NSString *)path
{
NSString *cacheStr=[self temPathWithPath:path];
NSFileManager *fileManager = [NSFileManager defaultManager];
BOOL result = [fileManager fileExistsAtPath:cacheStr];
NSLog(@"这个文件已经存在:%@",aaa@qq.com"是的":@"不存在");
return result;
}
/*******************************************判断路径下是否有文件****************************************/
-(NSArray *)hasFilesInDic:(NSString *)path
{
NSString *cacheStr=[self temPathWithPath:path];
NSFileManager * defaultManager = [NSFileManager defaultManager];
NSError *err = nil;
NSArray *contensArr= [NSArray arrayWithArray:[defaultManager contentsOfDirectoryAtPath:cacheStr error:&err]];
return contensArr;
}
/*******************************************返回拼接的tem下路径****************************************/
-(NSString *)temPathWithPath:(NSString *)path
{
// NSString *cachesPath = NSTemporaryDirectory();//tem文件目录
// NSString *cacheStr=[NSString stringWithFormat:@"%@%@",cachesPath,path];
NSString *cachesPath = [NSHomeDirectory()stringByAppendingPathComponent:@"Documents"];
NSString *cacheStr=[NSString stringWithFormat:@"%@/%@",cachesPath,path];
return cacheStr;
}
/*******************************************创建tem下路径****************************************/
-(BOOL)temCreatPathWithPath:(NSString *)path
{
if (![self temIsFileExist:path]) {
NSString *cacheStr=[self temPathWithPath:path];
NSFileManager *fileManager = [NSFileManager defaultManager];
return [fileManager createDirectoryAtPath:cacheStr withIntermediateDirectories:YES attributes:nil error:nil];
}
return YES;
}
/*******************************************更新tem下plist文件****************************************/
-(void)temUpdataPlistWithPath:(NSString *)fileName withKey:(NSString *)key withValue:(NSMutableDictionary *)value{
NSMutableDictionary *data = [self temGetPlistWithPath:fileName];
[data setObject:value forKey:key];
[data writeToFile:[self temPathWithPath:fileName] atomically:YES];
}
/*******************************************获取tem下plist文件****************************************/
-(NSMutableDictionary *)temGetPlistWithPath:(NSString *)fileName{
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile:[self temPathWithPath:fileName]];
return data;
}
/*******************************************存储用户偏好设置到NSUserDefults****************************************/
-(void)setUserDataWithKey:(id)data forKey:(NSString*)key
{
if (data == nil)
{
return;
}
else
{
[[NSUserDefaults standardUserDefaults] setObject:data forKey:key];
[[NSUserDefaults standardUserDefaults] synchronize];
}
}
/*******************************************读取用户偏好设置****************************************/
-(id)objectUserDataWithKey:(NSString*)key
{
id temp = [[NSUserDefaults standardUserDefaults] objectForKey:key];
if(temp != nil)
{
return temp;
}
return nil;
}
/*******************************************删除用户偏好设置****************************************/
-(void)removeUserDataWithkey:(NSString*)key
{
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
/*******************************************从tem读取json****************************************/
-(id)temGetDataFromJsonWithFile:(NSString *)fileName
{
NSString *jsonPath=[self temPathWithPath:fileName];
NSData *data=[NSData dataWithContentsOfFile:jsonPath];
NSError *error;
id jsonObject=nil;
if (data) {
jsonObject=[NSJSONSerialization JSONObjectWithData:data
options:NSJSONReadingAllowFragments
error:&error];
return jsonObject;
}
return jsonObject;
}
/*******************************************判断app是否第一次启动或者更新后第一次启动****************************************/
- (BOOL) isAppFirstRun{
NSString *currentVersion = [[[NSBundle mainBundle] infoDictionary]
objectForKey:@"CFBundleShortVersionString"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *lastRunKey = [defaults objectForKey:@"last_run_version_key"];
if (!lastRunKey) {
[defaults setObject:currentVersion forKey:@"last_run_version_key"];
return YES;
// App is being run for first time
//上次运行版本为空,说明程序第一次运行
}
else if (![lastRunKey isEqualToString:currentVersion]) {
[defaults setObject:currentVersion forKey:@"last_run_version_key"];
return YES;
// App has been updated since last run
//有版本号,但是和当前版本号不同,说明程序已经更新了版本
}
return NO;
}