欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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、层级关系图

iOS沙盒路径记录

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;
}


相关标签: 我的苹果