NSFileHandle

来源:互联网 发布:查询iphone网络制式 编辑:程序博客网 时间:2024/04/30 01:32

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 allocinitWithData: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.csdn.net/leeyehong_self/article/details/9529331

0 0
原创粉丝点击