NSFileHandle操作文件内容

1.读文件指定个数的内容

#define FILEPATH @"/Users/test/Desktop/newfile.txt"
NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:FILEPATH];
if(nil != fh)
{
    NSData * data = [fh readDataOfLength:5]; //读5个字符
    NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", str);
}

注:NSFileHandle相当于C语言中的FILE指针,那么读文件就相当于fopen函数中使用“r”作为打开文件模式。既然它与C语言类似,那读文件的时候也会有一个内部的读文件指针。当读完5个字符后,读文件指针已经被移动到了第五个字符后,如果再读字符,那么就从第六个字符开始了。


2.读文件全部内容

NSFileHandle * fh = [NSFileHandle fileHandleForReadingAtPath:FILEPATH];
if(nil != fh)
{
    NSData * data = [fh readDataToEndOfFile]; //读全部内容
    NSString * str = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", str);
}
注:这里要注意的是,如果文件内容过大的话,一下子都读到内存中,可能会造成内存崩溃的。


3.写文件

NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:FILEPATH];
if(nil != fh)
{
    [fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];
}
注:写文件函数相当于fopen函数中使用“w”作为打开文件模式。但它不同的是,如果文件不存在,它不会创建。并且,如果源文件存在的话,它会从文件起始位置开始写,将原来的内容进行覆盖。那如何清理原内容,然后重新写信息呢,请看下面的方法。


4.将源文件内容清空,然后写文件

NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:FILEPATH];
if(nil != fh)
{
    [fh truncateFileAtOffset:0]; //截断源文件,将文件内容大小截成零
    [fh writeData:[@"hello" dataUsingEncoding:NSUTF8StringEncoding]];
}
注意:有人说了,不想将内容清空,要在原来的基础上添加新内容,相当于fopen函数中使用“a”作为打开文件的模式。


5.在源文件内容后面继续写文件

NSFileHandle * fh = [NSFileHandle fileHandleForWritingAtPath:FILEPATH];
if(nil != fh)
{
    [fh seekToEndOfFile]; //将指针移到文件末位
    [fh writeData:[@", world!" dataUsingEncoding:NSUTF8StringEncoding]];
}




你可能感兴趣的:(NSFileHandle操作文件内容)