Ios下的文件管理, Ios下不像windows 文件系统那样可以访问任何的文件目录,如C盘、D盘什么的。在Ios中每个应用程序只能访问当前程序的目录,也即sandbox(沙盒模型)。

iOS为每个应用程序分配一个目录,该目录下默认有四个文件目录:

app:我们程序开发压缩的包文件,包含里面的程序集和资源文件。

documents:应用程序数据存储在Documents 中,但机于NSUerDefaults的首选设置除外

Library:基于NSUserDefaults 的首选设置存储在在Library/perfercens文件夹中

tmp:存储临时文件。

在本次开发中我的任务是 写相关的错误日志并将其写入到本地文件中,因此我选择的路径是documents。

我用的是使用NSFileManager 类进行文件管理,NSData进行文件读取,NSMutableData 进行文件写入的方案进行实现的。

创建NSFileManager 类中碰到的问题倒不是很多,但是用NSData 进行文件读取时,我却碰到总是无法获取句柄的问题(也就无法获取内容信息)

一开始我用的方法: [NSData dataWithContentsOfFile:path] path为整个文件的全路径,但是不论我怎么尝试,还是无法获取里面的内容。

后来我结合NSFileManager 来进行读取数据(在这里文件都是已经存在的)步骤如下:

例如:我们要读取的文件为:documents/cordova/log/201405.log

1、需要通过[NSFileManager changeCurrentDircectoryPath:[filePath stringByExpandingTildeInPath]]; 方法切换到documents/cordova/log  目录下面。(filePath 就是指定的该全部目录 具体可以参考NSSearchPathForDirectoriesInDomains 方法)

2、然后使用NSData *reader= [NSData dataWithContentsOfFile:@"201405.log"]  方法直接读取当前文件夹下的文件数据,这里已经将数据读取到内存中。

3、最后追加内容写入,

NSMutableData *write=[[NSMutableData alloc] initWithData:reader];--NSdata 初始化

[write appendData:meage] --添加数据

[write writeToFile:@“201405.log” atomically:YES];

其实我也不明白为什么直接给NSData全路径会出现得不到数据的问题。还有听说很多人说NSUrl 方式来写入和读取数据比较好。 下次若有时间也去好好体验一次。。。。这里先保留了!

 二、文件日志 读写文件

//读写操作

+(void)Info:(NSString *)message

{

@synchronized(self){//  读写线程安全

// DBNAME 是要查找的文件名字,文件全名

NSString *filePath = [self getLogBasePath];

NSFileManager *fileManager = [NSFileManager defaultManager];

BOOL isDirtory=NO;

if (!([fileManager fileExistsAtPath:filePath isDirectory:&isDirtory]&&isDirtory)) {

//若不存在文件夹则创建文件夹

[fileManager createDirectoryAtPath:filePath withIntermediateDirectories:NO attributes:nil error:nil];

}

NSString *date=  [[NSDate date] ToStringWithFormmate:@"yyyyMMdd"];

NSString *dateLogName=[date stringByAppendingString:@".txt"];

NSString *dateFilePath= [filePath stringByAppendingPathComponent:dateLogName];

if (![fileManager fileExistsAtPath:dateFilePath]) {

//文件不存在则创建

if(![fileManager createFileAtPath:dateFilePath contents:nil attributes:nil])return;

}

NSString *time=[[NSDate date] ToStringWithFormmate:@"yyyy-MM-dd hh:mm:ss"];

NSString *logMessage=[[NSString alloc] initWithFormat:@"%@   %@ \n",time,message];

NSData *reader= [NSData dataWithContentsOfFile:dateFilePath];

NSMutableData *write=[[NSMutableData alloc] initWithData:reader];//NSdata 初始化

[write appendData:[logMessage dataUsingEncoding:NSUTF8StringEncoding]]; //添加数据

BOOL reslut= [write writeToFile:dateFilePath atomically:YES];

if (reslut) {

NSLog(@"success");

}else

{

NSLog(@"fail");

}

}

}

日志读取

+(NSString*) readFileWithName:(NSString*)name

{

NSString *filePath = [self getLogBasePath];

NSData *reader= [NSData dataWithContentsOfFile:[filePath stringByAppendingPathComponent:name]];

NSString *result=[[NSString alloc] initWithData:reader encoding:NSUTF8StringEncoding];

return result;

}

+(NSString*)getLogBasePath //公用方法获取指定的目录

{

NSArray *directoryPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

NSString *documentDirectory = [directoryPaths objectAtIndex:0];

// DBNAME 是要查找的文件名字,文件全名

NSString *filePath = [documentDirectory stringByAppendingPathComponent:@"log"];

return filePath;

}

转载于:https://www.cnblogs.com/kingbo/p/3733592.html

IOS文件管理-NSFileMangager-NSdata相关推荐

  1. IOS 文件管理 2

    IOS开发-文件管理(二) 五.Plist文件 String方式添加               NSString *path = [NSHomeDirectory( )  stringByAppen ...

  2. iOS 图片转NSData

    iOS开发中 UIImage可能经常需要转为NSData 上传 传递等等 有两个比较常用的方法 UIImageJPEGRepresentation UIImagePNGRepresentation 第 ...

  3. php nsdata,iOS播放PCM,NSData流代码(Audio Queue Services)

    2019-12-28: 已归档,代码不保证可用 最近有需求从蓝牙接收音频数据进行播放,把一些东西记录下来,顺带希望可以帮到你 然后这里是用的是Audio Queue Services,只能用于PCM数 ...

  4. iOS NSString 与NSData转化

    1. 字符串转Data NSString * str =@"str"; NSData *data =[str dataUsingEncoding:NSUTF8StringEncod ...

  5. IOS文件管理系统:沙盒、NSFileManager、NSFileHandle、NSCoding、NSKeyedArchiver解析

    什么是沙盒? 苹果为我们每个app都分配了一个固定的文件夹,我们在开发过程中可以向文件夹存入我们想要存储的数据,同时也能从这些文件夹取这些数据,但是我们不能取到其他app所存储的数据.简单说,沙盒就是 ...

  6. iOS开发JSON字符串和字典互转

    1.相关属性简述 NSJSONReadingOptions读取属性: typedef NS_OPTIONS(NSUInteger, NSJSONReadingOptions) {NSJSONReadi ...

  7. iOS 入门开发踩坑实录

    其实人生也没有什么道理可讲,但是我们不必丧气,还是要期待,人生有奇遇. 前言 苹果开发者:iOS Developer 最近因为工作需要要开始搞iOS了,简单记录下我收集和学习的过程. 学习资料准备 组 ...

  8. 安卓手机管理软件_手机文件管理真的很难吗?

    希望星选 读完需要 3分钟 速读仅需1分钟 很多小伙伴吐槽没有好用的手机文件管理软件,今天给大家更新一期手机文件管理. 由于设备原因,这里只能给大家简单介绍安卓的文件管理,iOS的小伙伴拥有强大的iC ...

  9. iOS逆向工程Mac工具篇

    class-dump 简介 用于dump目标对象的class信息.它利用OC语言的runtime特性, 将存储在Mach-O可执行文件中的头文件信息提取出来, 并生成对应的.h文件. class-du ...

最新文章

  1. 161. Leetcode 55. 跳跃游戏 (贪心算法-贪心区间)
  2. php嵌套 frame,终极解决禁止网站被别人通过iframe引用嵌套套入。
  3. java oom dump_JVM 在遇到OOM(OutOfMemoryError)时生成Dump文件的三种方式
  4. Java中StringBuilder的清空方法比較
  5. 动态规划应用--找零钱
  6. 作者:潘柱廷(1969-),男,启明星辰教授级高级工程师、首席战略官。
  7. MySQL高级-MySQL并发参数调整
  8. gnu grub version 2.0.2设置启动顺序_如何修复grub异常
  9. TMS320C55x的寄存器
  10. ARM DS-5 Flex网络许可证编译错误“Error: C9933W: Waiting for license...”
  11. k系列服务器,Nvidia开普勒K4000、K2000、K2000D、K600四款Kepler架构Quadro显卡专业卡全新登场...
  12. 如何使用高德地图 API 做一个路线规划应用,展示自定义路线
  13. JavaScript大师Nicholas C. Zakas又一大作出中文版了
  14. Win32:三菱FX3U/FX5U读写软元件方法和注意事项
  15. 2018年南京大学计算机专业录取分数线,南京大学2018年录取分数线
  16. HTML5网页好看的一些特效
  17. 生物学哲学:科学哲学的新视野
  18. (六)区块的生成、验证及挖矿
  19. folly库安装(3)libevent、libunwind的安装
  20. mac mysql版本_mac mysql安装哪个版本

热门文章

  1. 数据结构与算法 迷宫问题
  2. LNMP架构的搭建--源码编译(MYSQL,PHP,nginx)
  3. php revel,试用revel-一个基于golang的web框架
  4. mysql jpa 正则_Spring Data JPA 实例查询
  5. 使用Pycharm将代码同步到GitHub
  6. 瑞银、太平洋投资、T. Rowe Price对加密货币投资持谨慎态度
  7. 今日恐慌与贪婪指数为40 恐慌程度有所上升
  8. 评分模型前奏:启发式评分模型开发
  9. Servlet案例6:显示用户的上次访问时间
  10. IntelliJ 一键添加双引号