对文件内容的操作NSHandle

对文件内容的操作和C语言相同,分为“读”和“写”。
我们来直接看如何读取吧

读文件

按字节读取

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建文建句柄
        NSFileHandle *fh=[NSFileHandle fileHandleForReadingAtPath:@"/Users/apple/Desktop/SSL/file"];
        //以只读方式打开文件生成文件句柄,(文件句柄相当于C语言中的文件指针)
        //从硬盘(文件)到内存叫做读,从内存到(文件)硬盘叫做写


        //读指定的字节
        NSData *data=[fh readDataOfLength:3];
        NSString *str=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@",str);
        }
    return 0;
}

我在文件中存入

I love 3g!

这里程序运行后的结果为:

I l

输出的是“I”,“ ”,“l”
如果我们接着读取呢?这里他就和C语言不同了,C语言一直是从头开始读,而OC会接着读。

//每次的读取都接着上一次的进度,每次读取都有读指针的偏移量
        data=[fh readDataOfLength:6];
        NSString *str2=[[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@",str2);

输出:

ove 3g

全文件读取

 //读出剩余所有文本,如果之前有读文本,则从上一次的进度接着读,如果没有,从0开始读。
        NSData *data2=[fh readDataToEndOfFile];
        NSString *str3=[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding];
        NSLog(@"%@",str3);

他也是,如果上面已经有读取的操作了,它会接着打印剩余的全部,但是如果没有,他会从头开始打印。

写文件

覆盖写入

 //写文件
        //以只写方式打开文件生成文件句柄
        NSFileHandle *fh=[NSFileHandle fileHandleForWritingAtPath:@"/Users/apple/Desktop/SSL/file"];
        [fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];

我们之前读出文件的是

I love 3g!

那我们猜猜现在写入文件后,文件内容是什么?

helloe 3g!

清空写入

//清空文件的内容,写入文件
        [fh truncateFileAtOffset:3];//将文件内容截断至几个字节,如果要清空文件内容,只需要截断至0个字节

我们这里试用一下这个方法,截取至剩余3个字节,文件内容为

hel

追加文件

这里和C语言又有所不同,这里我们需要先把文件内部指针移至文件尾部,

 //追加文件
        //将文件指针设在文件尾端
        [fh seekToEndOfFile];
        [fh writeData:[@"XXX" dataUsingEncoding:NSUTF8StringEncoding]];

文件内容变为

helXXX
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值