28 Foundation框架之NSFileHandle

28 Foundation框架之NSFileHandle

Tags: Objective-C


前面我们讲过NSFileManager对象,主要用来创建、删除、复制、移动文件或者目录。那么如果需要对文件进行写入和读取操作时候,我们应该使用NSFileHandle,通常来说,使用NSFileHandle的基本步骤如下:

  • 创建一个NSFileHandle用来打开指定的文件(这个文件如果不存在的话会返回nil,必须先用NSFileManager创建文件)
  • 对打开的文件进行IO操作
  • 关闭文件

代码实例如下:
NSFileHandleTest.m

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //创建一个NSFileHandle用来打开一个文件,只能读
        NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:@"/Users/Ralf/desktop/Learn/08.5/08.5/NSFileHandleTest.m"];
        if (fh == nil) {
            NSLog(@"Open of NSFileHandleTest.m for reading failed!!");
            return 1;
        }

        NSData *data;
        //读取文件的256字节
        data = [fh readDataOfLength:256];
        NSString *content = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"------输出NSFileHandleTest.m的前256字节------");
        NSLog(@"%@", content);
        //读取文件的所有内容
        data = [fh readDataToEndOfFile];
        content = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"------输出NSFileHandleTest.m的所有内容------");
        NSLog(@"%@", content);
        //关闭NSFileHandle打开的文件
        [fh closeFile];

        //创建一个NSFileHandle用来打开一个文件abc.txt,可写可读
        NSFileHandle *fh2 = [NSFileHandle fileHandleForUpdatingAtPath:@"/Users/Ralf/desktop/Learn/08.5/08.5/abc.txt"];
        if (fh2 == nil) {
            NSFileManager *fm = [NSFileManager defaultManager];
            [fm createFileAtPath:@"/Users/Ralf/desktop/Learn/08.5/08.5/abc.txt" contents:nil attributes:nil];
            fh2 = [NSFileHandle fileHandleForUpdatingAtPath:@"/Users/Ralf/desktop/Learn/08.5/08.5/abc.txt"];
        }

        NSString *str = @"I love iOS programming!!!";
        NSString *str2 = @"PHP";
        NSString *str3 = @"Wonderful!!!";

        //向文件写入数据,写完数据后文件指针指向最后
        [fh2 writeData:[str dataUsingEncoding:NSUTF8StringEncoding]];
        //获取文件指针的偏移位置
        NSLog(@"文件指针的偏移位置为:%d",[fh2 offsetInFile]);
        //将文件指针指向指定偏移位置
        [fh2 seekToFileOffset:7];
        //在指定文件指针后追加数据,追加的数据会修改当前位置上已经存在的数据
        [fh2 writeData:[str2 dataUsingEncoding:NSUTF8StringEncoding]];
        //讲文件指针指向文件最后位置
        [fh2 seekToEndOfFile];
        //在文件最后部分追加数据
        [fh2 writeData:[str3 dataUsingEncoding:NSUTF8StringEncoding]];

        //在指定偏移量的位置将文件截断,修改文件本身
        [fh2 truncateFileAtOffset:25];
        [fh2 closeFile];
    }
    return 0;
}

运行结果:
最后文件abc.txt的内容为

I love PHP programming!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值