OS因为沙盒机制,所以只能访问通讯录、相册和App内的文件,下面就来说说如何进行文件管理。

App所产生的数据都存在于自己的沙盒中,一般沙盒都有3个文件:DocumentsLibrarytmp
Documents: 这个目录存放用户数据。存放用户可以管理的文件;iTunes备份和恢复的时候会包括此目录。
Library: 主要使用它的子文件夹,我们熟悉的NSUserDefaults就存在于它的子目录中。
Library/Caches: 存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出删除,“删除缓存”一般指的就是清除此目录下的文件。
Library/Preferences: NSUserDefaults的数据存放于此目录下。
tmp: App应当负责在不需要使用的时候清理这些文件,系统在App不运行的时候也可能清理这个目录。

获取App沙盒根路径:

NSString *dirHome = NSHomeDirectory();

获取Documents目录路径:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

获取Library目录路径

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
NSString *libraryDirectory = [paths objectAtIndex:0];

获取Library/Caches目录路径

NSArray *cacPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [cacPath objectAtIndex:0];

获取Tmp目录路径

NSString *tmpDirectory = NSTemporaryDirectory();

创建文件夹/目录(返回创建结果)

- (BOOL)createDir:(NSString *)fileName {NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);NSString *documentsDirectory = [paths objectAtIndex:0];NSString *path = [NSString stringWithFormat:@"%@/%@",documentsDirectory,fileName];NSFileManager *fileManager = [NSFileManager defaultManager];BOOL isDir;// 先判断目录是否存在,不存在才创建if  (![fileManager fileExistsAtPath:path isDirectory:&isDir]) {BOOL res = [fileManager createDirectoryAtPath:path withIntermediateDirectories:YES attributes:nil error:nil];return res;} else {return NO;}
}

创建文件(返回创建结果)

- (BOOL)createFile:(NSString *)path {NSFileManager *fileManager = [NSFileManager defaultManager];// 在传入的路径下创建test.c文件NSString *testPath = [path stringByAppendingPathComponent:@"test.c"];// 通过data创建数据BOOL res = [fileManager createFileAtPath:testPath contents:nil attributes:nil];  [fileManager createFileAtPath:testPath contents:data attributes:nil];return res;
}

写数据到文件(返回写入结果)

- (BOOL)writeFile:(NSString *)path {NSString *testPath = [path stringByAppendingPathComponent:@"test.c"];NSString *content = @"将数据写入到文件!";BOOL res = [content writeToFile:testPath atomically:YES encoding:NSUTF8StringEncoding error:nil];return res;
}

读文件数据

- (void)readFile:(NSString *)path {// 方法1:NSData *data = [NSData dataWithContentsOfFile:path];  NSString *content = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);//方法2:NSString *content = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];NSLog(@"文件读取成功: %@", content);
}

文件属性

- (void)fileAttriutes:(NSString *)path{  NSFileManager *fileManager = [NSFileManager defaultManager];NSDictionary *fileAttributes = [fileManager attributesOfItemAtPath:path error:nil];NSArray *keys;id key, value;keys = [fileAttributes allKeys];int count = [keys count];for (int i = 0; i < count; i++) {key = [keys objectAtIndex:i];  // 获取文件名value = [fileAttributes objectForKey:key];  // 获取文件属性}
}

根据路径删除文件(返回删除结果)

- (BOOL)deleteFileByPath:(NSString *)path {NSFileManager *fileManager = [NSFileManager defaultManager];BOOL res = [fileManager removeItemAtPath:path error:nil];return res;NSLog(@"文件是否存在: %@", [fileManager isExecutableFileAtPath:path]?@"YES":@"NO");
}

根据文件名删除文件

- (BOOL)deleteFileByName:(NSString *)name {NSFileManager *fileManager = [NSFileManager defaultManager];// getLocalFilePath方法在下面[fileManager removeItemAtPath:[self getLocalFilePath:fileName] error:nil];
}

根据路径复制文件

+ (BOOL)copyFile:(NSString *)path topath:(NSString *)topath {BOOL result = NO;NSError *error = nil;result = [[NSFileManager defaultManager] copyItemAtPath:path toPath:topath error:&error];if (error) {NSLog(@"copy失败:%@", [error localizedDescription]);}return result;
}

根据路径剪切文件

+ (BOOL)cutFile:(NSString *)path topath:(NSString *)topath {    BOOL result = NO;NSError *error = nil;result = [[NSFileManager defaultManager] moveItemAtPath:path toPath:topath error:&error];if (error) {NSLog(@"cut失败:%@", [error localizedDescription]);}return result;
}

根据文件名获取资源文件路径

+ (NSString *)getResourcesFile:(NSString *)fileName {return [[NSBundle mainBundle] pathForResource:fileName ofType:nil];
}

根据文件名获取文件路径

+ (NSString *)getLocalFilePath:(NSString *)fileName {NSString *path = [NSHomeDirectory() stringByAppendingPathComponent:@"/Documents"]return [NSString stringWithFormat:@"%@/%@", path, fileName];
}

根据文件路径获取文件名称

+ (NSString *)getFileNameByPath:(NSString *)filepath {NSArray *array = [filepath componentsSeparatedByString:@"/"];if (array.count == 0) return filepath;return [array objectAtIndex:array.count-1];
}

根据路径获取该路径下所有目录

+ (NSArray *)getAllFileByName:(NSString *)path {NSFileManager *defaultManager = [NSFileManager defaultManager];NSArray *array = [defaultManager contentsOfDirectoryAtPath:path error:nil];return array;
}

根据路径获取文件目录下所有文件

+ (NSArray *)getAllFloderByName:(NSString *)path {NSFileManager *fileManager = [NSFileManager defaultManager];NSArray *fileAndFloderArr = [self getAllFileByName:path];NSMutableArray *dirArray = [[NSMutableArray alloc] init];BOOL isDir = NO;// 在上面那段程序中获得的fileList中列出文件夹名for (NSString *file in fileAndFloderArr) {NSString *paths = [path stringByAppendingPathComponent:file];[fileManager fileExistsAtPath:paths isDirectory:(&isDir)];if (isDir) {[dirArray addObject:file];}isDir = NO;}return dirArray;
}

获取文件及目录的大小

+ (float)sizeOfDirectory:(NSString *)dir {NSDirectoryEnumerator *direnum = [[NSFileManager defaultManager] enumeratorAtPath:dir];NSString *pname;int64_t s = 0;while (pname = [direnum nextObject]) {//NSLog(@"pname   %@",pname);NSDictionary *currentdict = [direnum fileAttributes];NSString *filesize = [NSString stringWithFormat:@"%@", [currentdict objectForKey:NSFileSize]];NSString *filetype = [currentdict objectForKey:NSFileType];if ([filetype isEqualToString:NSFileTypeDirectory]) continue;s = s + [filesize longLongValue];}return s*1.0;
}

重命名文件或目录

+ (BOOL)renameFileName:(NSString *)oldName toNewName:(NSString *)newName {BOOL result = NO;NSError *error = nil;result = [[NSFileManager defaultManager] moveItemAtPath:[kDSRoot stringByAppendingPathComponent:oldName] toPath:[kDSRoot stringByAppendingPathComponent:newName] error:&error];if (error){NSLog(@"重命名失败:%@", [error localizedDescription]);}    return result;
}

读取文件

+ (NSData *)readFileContent:(NSString *)filePath {return [[NSFileManager defaultManager] contentsAtPath:filePath];
}

保存文件

+ (BOOL)saveToDirectory:(NSString *)path data:(NSData *)data name:(NSString *)newName {NSString *resultPath = [path stringByAppendingPathComponent:[NSString stringWithFormat:@"/%@", newName]];return [[NSFileManager defaultManager] createFileAtPath:resultPath contents:data attributes:nil];
}

iOS NSFileManager文件管理(沙盒)相关推荐

  1. iOS开发:沙盒机制以及利用沙盒存储字符串、数组、字典等数据

    iOS开发:沙盒机制以及利用沙盒存储字符串.数组.字典等数据 1.初识沙盒:(1).存储在内存中的数据,程序关闭,内存释放,数据就会丢失,这种数据是临时的.要想数据永久保存,将数据保存成文件,存储到程 ...

  2. iOS 开发之沙盒机制 文件操作 (NSFielManager)

    原文链接:http://www.jianshu.com/p/349855b5a8ae iOS APP 可以在自己的沙盒里读写文件,但是,不可以访问其他 APP 的沙盒.每一个 APP 都是一个信息孤岛 ...

  3. iOS数据存储——沙盒。

    iOS数据的持久化,可以通过以下途径解决 1.通过文件管理\归档来解决. 2.如果只是少量数据,可通过NSUserDefaults解决,相当于android中的sharedPreferences. 3 ...

  4. iOS开发 清空沙盒路径下的缓存数据

    引言: 移动应用在处理网络资源时,一般都会做离线缓存处理,其中以图片缓存最为典型,其中很流行的离线缓存框架为 SDWebImage . 但是,离线缓存会占用手机存储空间,所以缓存清理功能基本成为资讯. ...

  5. (0051)iOS开发之沙盒(sandbox)机制和文件操作(一)

    1.IOS沙盒机制 IOS应用程序只能在为该改程序创建的文件系统中读取文件,不可以去其它地方访问,此区域被成为沙盒,所以所有的非代码文件都要保存在此,例如图像,图标,声音,映像,属性列表,文本文件等. ...

  6. android 沙盒 ios,iOS中的沙盒机制

    1.应用沙盒结构分析: 应用程序包:(图中的Layer)包含了所有的资源文件和可执行文件 Documents: 保存应用运行时生成的需要出持久化的数据,iTunes同步设备会备份该目录.例如,游戏应用 ...

  7. iOS开发之沙盒机制(SandBox)

    iOS APP可以在自己的沙盒里读写文件,但是,不可以访问其他APP的沙盒.每一个APP都是一个信息孤岛,相互是不可以进行通信的,唯独可以通过URL Scheme.沙盒里面的文件可以是照片.声音文件. ...

  8. iOS appstore无沙盒账号登录选项

    IOS进行内购支付在IOS系统 设置appstore中选择沙盒账户登录 发现appstore中没有沙盒账户登录选项 这是因为这台手机还没进行过沙盒账号登录, 解决方案: 手机运行内购程序会出现登录沙盒 ...

  9. (0052)iOS开发之沙盒(sandbox)机制和文件操作(二)

    我们看看如何获取应用程序沙盒目录.包括真机的沙盒的目录. 1.获取程序的Home目录 NSString *homeDirectory = NSHomeDirectory(); NSLog(@" ...

最新文章

  1. php openssl做什么,php php_openssl.dll文件有什么用?
  2. 1370亿参数、接近人类水平,谷歌重磅推出对话AI模型LaMDA
  3. linux系统支持游戏,3种方法让Linux系统支持游戏
  4. python入门代码示例-这可能是最好玩的python GUI入门实例!
  5. Codeforces Round #297 (Div. 2)D. Arthur and Walls 搜索bfs
  6. Dialog源码分析
  7. php 如何缓存数据字典,使用PHP脚本如何导出MySQL数据字典
  8. SAP Kyma(Extension Factory on SAP Cloud Platform)的架构简介
  9. Vue源码学习: 关于对Array的数据侦听
  10. awk编程基本使用示例
  11. mysql如何进行宿舍分配_手把手教你做一个Jsp Servlet Mysql实现的学生宿舍管理系统...
  12. Android Studio 录屏/电脑实时显示手机的画面
  13. docker容器-nginx conf文件使用环境变量值
  14. Educational Codeforces Round 61 (Rated for Div. 2) D. Stressful Training(贪心+二分+优先队列)
  15. 网络营销的概念及特征是什么?
  16. 谁说码农不懂浪漫?(js写的'老婆生日快乐'特效)
  17. VS2019生成DLL
  18. 计算机网络:划分子网和构造超网
  19. repo init 错误SyntaxError:invalid syntax
  20. mysql查询周边商铺_基于Mysql5.7实现查找附近的店铺

热门文章

  1. java算球体积的代码_java - 球体体积法不起作用 - 堆栈内存溢出
  2. android开启照相功能,Android--启动拍照功能并返回结果
  3. python average函数详解_Python内置函数详解——总结篇
  4. 【List】个人 常用学习工作软件清单
  5. matlab-simulink-simscape的直流电动机模型仿真
  6. c语言学习周报(2020.11.21-11.28)
  7. 简述计算机五种常见动画及特点。【可拆成多个简答】
  8. 浅析安全架构中遇到的问题
  9. 健身房小姐姐爆满了,我只用PR做了这一件事!
  10. 或取代当前非易失性内存技术 Crossbar正式进军中国存储市场