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;

}

IOS文件管理-NSFileMangager-NSdata的更多相关文章

  1. iOS 基础类解析 - NSData、NSMutableData

    iOS 基础类解析 - NSData.NSMutableData 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致& ...

  2. IOS 文件管理 2

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

  3. iOS NSDictionary、NSData、JSON数据类型相互转换

    iOS经常需要用到数据类型的转换,下面列举一下常用类型的转换. 1.NSDictionary类型转换为NSData类型: //NSDictionary -> NSData: NSDictiona ...

  4. iOS 图片转NSData-b

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

  5. iOS NSString 和NSData 转换

    NSString 转换成NSData 对象 NSData* xmlData = [@"testdata" dataUsingEncoding:NSUTF8StringEncodin ...

  6. iOS NSDictionary、NSData、JSON等 数据类型相互转换

    1.NSDictionary类型转换为NSData类型: NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @&qu ...

  7. iOS - Usage of NSData

    Reference link : https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/BinaryData/T ...

  8. <iOS>UIImage变为NSData并进行压缩

    http://www.cnblogs.com/robinkey/archive/2013/01/21/2869930.html //sdk中提供了方法可以直接调用 UIImage *img = [UI ...

  9. ios开发之 -- NSData 和 NSString , UIImage 等之间的互转

    //NSData转换为UIImage NSData *imageData = [NSData dataWithContentsOfFile: imagePath]; UIImage *image = ...

随机推荐

  1. 慕课网:C++ & 数据结构

    课程链接:james_yuan的课程 这部分太枯燥了,如果教材难度稍大,根本就学不下去,所以就先看看通俗的视频吧. 课程目录 1.C++远征之起航篇 - C++亮点尽在其中 2.C++远征之离港篇 - ...

  2. x+y = ((x&y)<<1) + (x^y) 证明

    法一:我们考虑x,y在二进制表示时候,按位相加其中第i位xi+yi = ((xi&yi)<<1) + (xi^yi)其中(xi&yi)<<1表示当xi和yi都是 ...

  3. ubuntu server nginx 安装与配置

    ubuntu server nginx 安装与配置 一:关于nginx http://wiki.ubuntu.org.cn/Nginx http://nginx.org/cn http://wiki. ...

  4. MySQL5.7 JSON实现简介

    版权声明:本文由吴双桥原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/205 来源:腾云阁 https://www.qclo ...

  5. java main函数

    public static void main(String[] args)[String args[]]也对 1)public :公共的权限最大,在任何情况下都可以访问. 原因:为了保证java虚拟 ...

  6. wiki-editor语法

    1.==标题== 2.::换行缩进 3.[[文件:example.png]] 图片 4.** 名字|名字 链接

  7. Tarjan--LCA算法的个人理解即模板

    tarjan---LCA算法的步骤是(当dfs到节点u时): 实际:  并查集+dfs 具体步骤: 1 在并查集中建立仅有u的集合,设置该集合的祖先为u 1 对u的每个孩子v:    1.1 tarj ...

  8. 图片填充UIImageView大小不对

    http://www.2cto.com/kf/201507/412894.html UIView的contentMode属性: 默认为Scale To Fill,会保留view的比例,不会完全按照设定 ...

  9. hadoop学习笔记:hadoop文件系统浅析

    1.什么是分布式文件系统? 管理网络中跨多台计算机存储的文件系统称为分布式文件系统. 2.为什么需要分布式文件系统了? 原因很简单,当数据集的大小超过一台独立物理计算机的存储能力时候,就有必要对它进行 ...

  10. JS模块式开发

    问题:js文件须严格保证加载顺序(比如上例的1.js要在2.js的前面),依赖性最大的模块一定要放到最后加载,当依赖关系很复杂的时候,代码的编写和维护都会变得困难! C语言中模块开发-include ...