---------------
1NSFileHandle
---------------
文件读与写的操作,都是相对于内存和硬盘而言的.
1.内存是大脑
2.硬盘是书本
读写也可以认为,是相对于应用程序而言的.
-----------------
2文件句柄的创建
-----------------
打开一个文件,生成一个文件句柄,这个句柄就是这个文件的代表.
NSFileHandle类就表示这个文件句柄,文件句柄是以打开文件而创建的.
文件句柄的创建:
NSFileHandle类的 +fileHandleForReadingAtPath:方法. //只读
NSFileHandle类的 +fileHandleForWritingAtPath:方法. //只写
用法:
//以只读方式打开文件生成文件句柄
NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath:str];
//以只写方式打开文件生成文件句柄
NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:str];
-----
3读
-----
NSFileHandle对象的 –readDataOfLength:方法. //读指定的字节
返回一个NSData对象的地址.
NSFileHandle对象的 –readDataToEndOfFile方法. //一直读到文件末尾
返回一个NSData对象的地址.
用法:
//从文件中读取3个字节
NSData *data = [fileHandle readDataOfLength:3];
//这个方法,可以继续读文件
data = [fileHandle readDataOfLength:5];
NSString *str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@" %@",str );
//一直读到文件末尾
data = [fileHandle readDataToEndOfFile];
-----
4写
-----
NSFileHandle对象的 –writeData:方法. //不会创建文件
返回void
NSFileHandle对象的 –truncateFileAtOffset:方法. //截断并剩余字节数
返回void
NSFileHandle对象的 –seekToFileOffset: //设置读写指针,移过的字节数
返回void
NSFileHandle对象的 –seekToEndOfFile方法. //设置读写指针,到文件末尾
返回unsigned long long
注意:
这个方法的返回值,不是表示再次移过的字节数,而是表示总的移过的字节数,也就是文件的大小.
用法:
[fileHandle writeData:[@"hello world" dataUsingEncoding:NSUTF8StringEncoding]];
//使用间接的方式,覆盖文件
[fileHandle truncateFileAtOffset:0];
//使用间接的方式,追加文件
[fileHandle seekToEndOfFile];
//使用间接的方式,得到文件的大小
NSLog(@"%llu",[fileHandle seekToEndOfFile]);
注意:
1.只写方式打开的文件,默认使用改写的方式,既不是覆盖,也不是追加.
2.使用移动指针的方式,写入文件,也是使用的改写的方式.
-------------------------------------------------