NSFileHandle
/*
文件处理句柄要完成的工作: 相当于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的更多相关文章
- OC NSFileHandle(文件内容操作)
OC NSFileHandle(文件内容操作) 初始化 [NSFileHandle fileHandleForUpdatingAtPath:@"data.txt"]; //file ...
- 【原】iOS学习之文件管理器(NSFileManager)和文件对接器(NSFileHandle)
1.文件管理器(NSFileManager) 1> 主要作用及功能方法 主要作用:此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 功能方法: 2> 创建文件夹 创建所 ...
- ios NSFileManager和NSFileHandle(附:获取文件大小 )
转自 http://blog.csdn.net/zhibudefeng/article/details/7795946 //file 文件操作 NSFileManager 常见的NSFileMana ...
- iOS开发——网络篇——文件下载(NSMutableData、NSFileHandle、NSOutputStream)和上传、压缩和解压(三方框架ZipArchive),请求头和请求体格式,断点续传Range
一.小文件下载 NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion ...
- 读取和写入 文件 (NSFIleManger 与 NSFileHandle)
读取和写入 文件 //传递文件路径方法 -(id)initPath:(NSString *)srcPath targetPath:(NSString *)targetPath { self = [su ...
- NSFileHandle 、 沙箱机制 、 属性列表
1 使用NSFilehandle进行数据读写 1.1 问题 NSFileManager用于实现对文件的操作,而NSFileHandle是IOS提供的对文件内容(二进制数据)进行操作的类,例如数据的读写 ...
- UI进阶 文件管理器(NSFileManager)文件对接器(NSFileHandle)
一.文件管理器与文件连接器之间的区别 文件管理器(NSFileManager) 此类主要是对文件进行的操作(创建/删除/改名等)以及文件信息的获取. 文件连接器(NSFileHandle) 此类主要是 ...
- IOS的XML文件解析,利用了NSData和NSFileHandle
如果需要了解关于文档对象模型和XML的介绍,参看 http://www.cnblogs.com/xinchrome/p/4890723.html 读取XML 上代码: NSFileHandle *fi ...
- NSFileHandle 和 NSFileManager的一些用法
文件操作 NSFileManager 常见的NSFileManager文件的方法: -(BOOL)contentsAtPath:path 从文件中读取数据 -(BOOL)createFileAtPat ...
随机推荐
- CSS3点点滴滴
css查遗补漏 标签(空格分隔): css 如果值为若干单词,则要给值加引号.p {font-family: "sans serif";} body的字体有继承兼容性问题,通常这么 ...
- ffmpeg使用转码学习
ffmpeg在官网上描述自身:是一个对视频和音频进行记录,转换,流化的完整的跨平台解决方案.事实上,现在有很多工具都是基于ffmpeg来进行视频音频的处理工具的.比如鼎鼎大名的格式工厂,就是使用ffm ...
- .Net Task<T>的一种比较神奇的卡死情况(Wait/Result卡死, await能得到结果)
出现的环境.Net4.0 + WebApi1(4.0.30506.0) + Microsoft.Bcl.Async.1.0.168 自己死活看不出原因, 分享出来给大家看看,希望有人能找到问题的关键 ...
- Linux ACL
ACL 是什么 ACL的全称是 Access Control List (访问控制列表) ,一个针对文件/目录的访问控制列表.它在UGO权限管理的基础上为文件系统提供一个额外的.更灵活的权限管理机制. ...
- LeetCode - 52. N-Queens II
52. N-Queens II Problem's Link --------------------------------------------------------------------- ...
- MySQL 5.1 参考手册CHM (官方 简体中文版)
点此下载: MySQL 5.1 参考手册CHM (官方 简体中文版) 在线文档:http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/
- 【SQL】靠谱的TRIM函数,附赠过程一枚
SQL中有LTRIM和RTRIM这两个函数分别用于去除字符串的首.尾空格,缺乏常见的能同时去除首尾的TRIM函数,另外,这俩函数都只对[空格]有效,所以如果首尾是制表符.换行符等等[空白],它们是不处 ...
- java for 的用法总结
J2SE 1.5提供了另一种形式的for循环.借助这种形式的for循环,可以用更简单地方式来遍历数组和Collection等类型的对象.本文介绍使用这种循环的具体方式,说明如何自行定义能被这样遍历的类 ...
- java的各种类型转换汇总
java类型转换 Integer String Long Float Double Date 1如何将字串 String 转换成整数 int? A. 有两个方法: 1). int i = Intege ...
- 孙鑫MFC学习笔记:15多线程
15 1.进程地址空间 2.线程 3.CreateThread创建一个线程 4.CloseHandle关闭线程句柄,要在不再使用线程句柄的时候关闭,递减线程引用计数 5.编辑框默认不支持多行,需要打开 ...