NSFileManager是对文件本身的操作,而NSFileHandle是对文件内容的操作,主要是读和写。
下面是常用的NSFileHandle方法
+(NSFileHandle *)fileHandleForReadingAtPath:path //打开一个文件准备读取
+(NSFileHandle *)fileHandleForWritingAtPath:path //打开一个文件准备写入
+(NSFileHandle *)fileHandleForUpdatingAtPath:path //打开一个文件准备更新(读取或写入)
+(NSData *)availableData //从设备或通道返回可用的数据
+(NSData *)readDataToEndOfFile //读取其余的数据直到文件的末尾(最多UINT_MAX字节)
-(NSData *)readDataOfLength:(NSUInteger)bytes //从文件读取指定字节的内容
-(void)writeData:data //将data写入文件
-(unsigned long long)offsetInFile //获取当前文件的偏移量
-(void)seekToFileOffset:offset //设置当前文件偏移量
-(unsigned long long)seekToEndOfFile //将文件的偏移量定位到文件的末尾,同时返回文件的大小
-(void)truncateFileAtOffset:offset //将文件的长度设置为offset字节(如果需要,可以填充内容)
-(void)closeFile //关闭文件
下面举个例子介绍下NSFileHandle的具体用法
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:PATH];//以只读方式打开文件生成文件句柄
NSData *data = [fh readDataOfLength:3]; //从文件读取指定字节的内容
data = [fh readDataOfLength:5];//从上次读取的位置往后再读5个字节
NSString *str = [[NSString alloc] initWithData:dataencoding:NSUTF8StringEncoding];
如果文件内容不长的话,可以一次性读到结尾。
NSData *data = [fh readDataToEndOfFile];//一次性的把文件中的内容全读出来
以上介绍的是如何读取文件下面来介绍如何写入文件
NSFileHandle *fh = [NSFileHandle fileHandleForWritingAtPath:PATH];//以只写方式打开文件生成文件句柄
[fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];//这将替换PATH目录下文件的前五个字节剩下的内容不变
如果我们想把文件清空再重新写入该怎么办呢?
[fh truncateFileAtOffset:0];//将文件内容截断至0字节 这样就会把内容清空
那么我们能不能保持原文件内容不变往后面追加内容呢,也是可以的
[fh seekToEndOfFile]; //我们先把读写指针设在文件的尾端
[fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];
writeToFile 也用于文件的写入它和NSFileHandle有什么区别呢
[@"" writeToFile:PATH atomically:YES encoding:NSUTF8StringEncoding error:nil];
writeToFile往文件里面写数据,都是覆盖式写入的 atomically的YES 或 NO YES 表示保证文件的写入原子性,就是说会先创建一个临时文件,直到文件内容写入成功再导入到目标文件里。 NO 则直接写入目标文件里。
如果要采用追回式的文件写入,也就是不覆盖原文件的内容可以采用NSFileHandle
转自:http://blog.youkuaiyun.com/leeyehong_self/article/details/9529331