//NSFileHandle文件句柄(只能操作文件不能操作文件夹)
//文件代言人,如果将NSFileHandle对象和一个文件关联以后
//从文件句柄中读数据就相当于从文件中读数据,往文件句柄写数据就相当于往文件中写数据
#import <Foundation/Foundation.h>
#define PATH @"/Users/IOS1601/Desktop/exercise/a.txt"
int main(int argc, const char * argv[]) {
@autoreleasepool {
#pragma mark ---文件读操作---
//1.创建文件句柄对象和文件关联
//方式一:以只读的形式打开文件(只能通过文件句柄对文件进行只读操作)
//参数:需要和文件句柄关联的文件路径
NSFileHandle *handle = [NSFileHandle
fileHandleForReadingAtPath:PATH];
//2.读取文件内容
//a.读到文件末尾得到的是二进制数据
NSData *data1 = [handle readDataToEndOfFile];
//将二进制文件转换成字符串
NSString *str1 = [[NSString alloc ] initWithData:data1
encoding:NSUTF8StringEncoding];
NSLog(@"\n%@\n",str1);
//b.读取指定长度的内容(如果在执行当前这个读操作前,已经从
//文件句柄中读取过数据,那么这次读取就从上次读取的位置继续读取);
NSData *data2 = [handle readDataOfLength:7];
NSString *str2 = [[NSString alloc] initWithData:data2 encoding:NSUTF8StringEncoding];
NSLog(@"**%@",str2);
//c.从指定的位置读取,设置读写进度
//参数:偏移量(相对于文件的起始位置)
[handle seekToFileOffset:3];
NSData *data3 = [handle readDataOfLength:2];
NSString *str3 =[[NSString alloc] initWithData:data3
encoding:NSUTF8StringEncoding];
NSLog(@"%@",str3);
#pragma mark ---文件写操作---
//方式二:以只写的形式打开文件(只能通过文件句柄进行只写操作)
// NSFileHandle *handle1 = [NSFileHandle
//将指定的数据写入文件句柄中,(会覆盖原来的数据)
//参数:数据的二进制形式
handle = [NSFileHandle fileHandleForWritingAtPath:PATH];
NSString *str4 = @"hahha";
NSData *data4 = [str4 dataUsingEncoding:NSUTF8StringEncoding];
[handle writeData:data4];
//每次从文件句柄中写数据的时候,都是从
//第一行空的开始写,下一次写也会接着上一次写完的位置接着后面写
NSString *str5 = @"luhan";
NSData *data5 = [str5 dataUsingEncoding:NSUTF8StringEncoding];
[handle writeData:data5];
//2.设置读写进度
//将读写进度定位到文件末尾(就是从文件的末尾开始写)
[handle seekToEndOfFile];
NSString *str6 = @"honey honey";
NSData *data6 = [str6 dataUsingEncoding:NSUTF8StringEncoding];
[handle writeData:data6];
//返回值:当前位置到最后的长度
long long length = [handle seekToEndOfFile];
NSLog(@"%lld",length);
//3.清除文件内容,从指定的位置开始清除内容
//传入0表示把文件的所有的内容清除
[handle truncateFileAtOffset:10];
}
return 0;
}