/*

文件处理句柄要完成的工作:  相当于C中的文件操作,诸如 打开,读,写,关闭,修改文件偏移量等行为

类名:   NSFileHandle

注意: 操作句柄时,重点把握文件的偏移量在哪个位置

重点方法:

1,类方法创建句柄  fileHandleForXXX  可读,可写,读写

2, 读句柄,readXXX

3, 写句柄,writeXXX

4, 修改偏移量: seekXXX

5, 获取偏移量:  offsetXXX

6, 最后要将句柄关闭, closeFile

*/

#define PATH @"/Users/wenhua/Desktop/text.txt"

// text.txt内容为:1234567890abcdefghijklmnopqrstuvwxyz

void readFileByHandle(void)

{

//新建一个文件句柄对象

//    NSFileHandle * fh = [[NSFileHandle alloc]init];

// 打开一个文件,生成一个句柄,  对应c中的 fopen, “r”

NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:PATH];

//  读文件,读10个字节, 对应c中的, fread

NSData* data = [fh readDataOfLength:10];

NSLog(@"%@", [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);//1234567890

//第二次读

NSData *data2 = [fh readDataOfLength:10];

NSLog(@"第二次读:%@",[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding]);// abcdefghij

//从当前偏移量开始读到文件末尾

NSData* dataEnd = [fh readDataToEndOfFile];

NSLog(@"读到文件末尾:%@",[[NSString alloc]initWithData:dataEnd  encoding:NSUTF8StringEncoding]);

//修改文件偏移量,对应c中的 fseek

[fh seekToFileOffset:0];

//第三次读

NSData *data3 = [fh readDataOfLength:10];

NSLog(@"在修改文件偏移量之后,再读:%@",[[NSString alloc]initWithData:data3 encoding:NSUTF8StringEncoding]);

//将文件偏移量置到文件末尾

[fh seekToEndOfFile];

//第四次读

NSData *data4 = [fh readDataOfLength:10];

NSLog(@"将文件偏移量置到文件末尾,再读:%@",[[NSString alloc]initWithData:data4 encoding:NSUTF8StringEncoding]);

// 关闭文件句柄  对应c中的 fclose

[fh closeFile];

}

void writeFileByHandle(void)

{

//写打开一个文件,只能写,不能读 fopen "w"

NSFileHandle * fh = [ NSFileHandle fileHandleForWritingAtPath:PATH];

//将文件偏移量置到末尾,防止覆盖以前的内容

[fh seekToEndOfFile];

//写文件 fwrite

[fh writeData:[@"wenhua" dataUsingEncoding:NSUTF8StringEncoding]];

//在只写打开的情况下不能读句柄

//    NSData* data = [fh readDataToEndOfFile];

//    NSLog(@"data:%@",data);

[fh closeFile];

}

void rwFileByHandle(void)

{

//可读可写打开  fopen "a"

NSFileHandle *fh = [ NSFileHandle fileHandleForUpdatingAtPath:PATH];

NSLog(@"可读可写打开后,默认偏移量为:%llu", [fh offsetInFile]);// 0

//全部读完

NSData* data=[fh readDataToEndOfFile];

NSLog(@"data:%@", [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);

//查看偏移量

NSLog(@"全部读完之后,偏移量为:%llu",[fh offsetInFile]);

//写文件

[fh writeData:[@"66666666666666666" dataUsingEncoding:NSUTF8StringEncoding ]];

//查看偏移量

NSLog(@"全部读完之后,偏移量为:%llu",[fh offsetInFile]);

[fh seekToFileOffset:0];

NSData* data2 =[fh readDataToEndOfFile];

NSLog(@"写完66666之后,再读:data2:%@",[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding]);

[fh closeFile];

}

NSFileHandle的更多相关文章

  1. OC NSFileHandle(文件内容操作)

    OC NSFileHandle(文件内容操作) 初始化 [NSFileHandle fileHandleForUpdatingAtPath:@"data.txt"]; //file ...

  2. 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)

    1.文件管理器(NSFileManager) 1> 主要作用及功能方法 主要作用:此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 功能方法: 2> 创建文件夹 创建所 ...

  3. ios NSFileManager和NSFileHandle(附:获取文件大小 )

    转自 http://blog.csdn.net/zhibudefeng/article/details/7795946 //file 文件操作 NSFileManager  常见的NSFileMana ...

  4. iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range

    一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...

  5. 读取和写入 文件 (NSFIleManger 与 NSFileHandle)

    读取和写入 文件 //传递文件路径方法 -(id)initPath:(NSString *)srcPath targetPath:(NSString *)targetPath { self = [su ...

  6. NSFileHandle 、 沙箱机制 、 属性列表

    1 使用NSFilehandle进行数据读写 1.1 问题 NSFileManager用于实现对文件的操作,而NSFileHandle是IOS提供的对文件内容(二进制数据)进行操作的类,例如数据的读写 ...

  7. UI进阶 文件管理器(NSFileManager)文件对接器(NSFileHandle)

    一.文件管理器与文件连接器之间的区别 文件管理器(NSFileManager) 此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 文件连接器(NSFileHandle) 此类主要是 ...

  8. IOS的XML文件解析,利用了NSData和NSFileHandle

    如果需要了解关于文档对象模型和XML的介绍,参看 http://www.cnblogs.com/xinchrome/p/4890723.html 读取XML 上代码: NSFileHandle *fi ...

  9. NSFileHandle 和 NSFileManager的一些用法

    文件操作 NSFileManager 常见的NSFileManager文件的方法: -(BOOL)contentsAtPath:path 从文件中读取数据 -(BOOL)createFileAtPat ...

随机推荐

  1. HT for Web自定义3D模型的WebGL应用

    有不少朋友询问<HTML5 Web 客户端五种离线存储方式汇总>文章例子的3D表计模型是如何生成的,这个例子是通过导入3dmax设计好的表计模型,然后通过obj格式导入到HT for We ...

  2. UsefulSQL

    FindObject: ---在当前Server上找某某object,注意只需修改"要找的object"就可以使用EXEC sp_MSforeachdb 'use ? ;IF EX ...

  3. shell脚本二

    在shell脚本一 中,我讨论了shell脚本的语法规范,shell脚本的变量,以及shell脚本的测试语句. 仅仅懂得这些只能写简单的脚本,在简单的脚本中各条语句按顺序执行,从而实现自动化的管理,顺 ...

  4. Sql去重语句

    海量数据(百万以上),其中有些全部字段都相同,有些部分字段相同,怎样高效去除重复? 如果要删除手机(mobilePhone),电话(officePhone),邮件(email)同时都相同的数据,以前一 ...

  5. Emit学习(2) - IL - 常用指令介绍

    学习Emit必不可少的, 会使用到IL中间代码. 初见IL代码, 让我有一种汇编的感觉, 让我想起了, 大学时, 学习8051的汇编语言. 多的就不扯了, 直接进入正题, OpCodes指令集是不是有 ...

  6. The service cannot be activated because it does not support ASP.NET compatibility

    刚刚在ASP.NET创建一个Service,在运行时,它即显示异常: The service cannot be activated because it does not support ASP.N ...

  7. 在C#中,不安装Oracle客户端如何连接Oracle数据库

    本方法优点: 1.程序内集成Oracle客户端,无需用户自行进行配置 本方法缺点: 2.增加程序包的体积(Oracle instant client本身有几十兆大小) 下面说一下如何实现. 0.首先, ...

  8. C#编程总结(七)数据加密——附源码

    C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容 ...

  9. Angular 2 要来了,Wijmo 已准备好迎接

    Angular 是一款优秀的前端JS框架,已被用于Google的多款产品中,其核心特点是:MVVM.模块化.自动化双向数据绑定.语义化标签.依赖注入等.6年过去了,Angular 迎来了2.0版本. ...

  10. 如何优雅地使用 Windows 10 ?

    身为一个伪电脑Geek,就算不懂电脑,也要把那些更不懂电脑的人给唬住. 1.入门级别: 当然就是让别人从视觉上感觉你的电脑不一般啦 第一步:桌面要干净,干净到什么程度呢,要像这样 当别人第一眼看到你的 ...