• NSFileHandle


    /*

     文件处理句柄要完成的工作相当于C中的文件操作,诸如 打开,读,写,关闭,修改文件偏移量等行为

     

       类名:   NSFileHandle

     

        注意: 操作句柄时,重点把握文件的偏移量在哪个位置

            

        重点方法:

                 1,类方法创建句柄  fileHandleForXXX  可读,可写,读写

     

                 2, 读句柄,readXXX   

                 3, 写句柄,writeXXX

                 4, 修改偏移量: seekXXX

                 5, 获取偏移量:  offsetXXX

                 6, 最后要将句柄关闭, closeFile

     */

     #define PATH @"/Users/wenhua/Desktop/text.txt"

    // text.txt内容为:1234567890abcdefghijklmnopqrstuvwxyz

    void readFileByHandle(void)

    {

        //新建一个文件句柄对象

    //    NSFileHandle * fh = [[NSFileHandle alloc]init];

        

        // 打开一个文件,生成一个句柄对应c中的 fopen “r”

        NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:PATH];

        

        //  读文件,读10个字节, 对应c中的, fread

        NSData* data = [fh readDataOfLength:10];

        NSLog(@"%@", [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);//1234567890

     

        //第二次读

        NSData *data2 = [fh readDataOfLength:10];

        NSLog(@"第二次读:%@",[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding]);// abcdefghij

     

        //从当前偏移量开始读到文件末尾

        NSData* dataEnd = [fh readDataToEndOfFile];

        NSLog(@"读到文件末尾:%@",[[NSString alloc]initWithData:dataEnd  encoding:NSUTF8StringEncoding]);

            

        //修改文件偏移量,对应c中的 fseek

        [fh seekToFileOffset:0];

        //第三次读

        NSData *data3 = [fh readDataOfLength:10];

        NSLog(@"在修改文件偏移量之后,再读:%@",[[NSString alloc]initWithData:data3 encoding:NSUTF8StringEncoding]);

        

        //将文件偏移量置到文件末尾

        [fh seekToEndOfFile];

        //第四次读

        NSData *data4 = [fh readDataOfLength:10];

        NSLog(@"将文件偏移量置到文件末尾,再读:%@",[[NSString alloc]initWithData:data4 encoding:NSUTF8StringEncoding]);

        

        

     

        // 关闭文件句柄  对应c中的 fclose

        [fh closeFile];

        

        

    }

     

     

    void writeFileByHandle(void)

    {

        //写打开一个文件,只能写,不能读 fopen "w"

        NSFileHandle * fh = [ NSFileHandle fileHandleForWritingAtPath:PATH];

        

        //将文件偏移量置到末尾,防止覆盖以前的内容

        [fh seekToEndOfFile];

        

        //写文件 fwrite

        [fh writeData:[@"wenhua" dataUsingEncoding:NSUTF8StringEncoding]];

        

        //在只写打开的情况下不能读句柄

    //    NSData* data = [fh readDataToEndOfFile];

    //    NSLog(@"data:%@",data);

        [fh closeFile];

        

    }

     

    void rwFileByHandle(void)

    {

        //可读可写打开  fopen "a"

        NSFileHandle *fh = [ NSFileHandle fileHandleForUpdatingAtPath:PATH];

        

        NSLog(@"可读可写打开后,默认偏移量为:%llu", [fh offsetInFile]);// 0

        //全部读完

        NSData* data=[fh readDataToEndOfFile];

        NSLog(@"data:%@", [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding]);

        //查看偏移量

        NSLog(@"全部读完之后,偏移量为:%llu",[fh offsetInFile]);

        

        //写文件

        [fh writeData:[@"66666666666666666" dataUsingEncoding:NSUTF8StringEncoding ]];

        //查看偏移量

        NSLog(@"全部读完之后,偏移量为:%llu",[fh offsetInFile]);

        [fh seekToFileOffset:0];

        NSData* data2 =[fh readDataToEndOfFile];

        NSLog(@"写完66666之后,再读:data2:%@",[[NSString alloc]initWithData:data2 encoding:NSUTF8StringEncoding]);

        [fh closeFile];

    }

  • 相关阅读:
    Jquery里live事件移除原因
    js委托事件-addEventListeners(冒泡方向)
    后端同同不肯给我算好的时间差给我,只好自己写了:
    js滚动到顶部底部代码
    浏览器地址栏运行HTML代码(谷歌)
    黑马vue---56-58、vue组件创建的三种方式
    黑马vue---46、vue使用过渡类名实现动画
    黑马vue---28、vue中全局过滤器的基本使用
    vue devtools无法使用
    红心点赞效果的实现
  • 原文地址:https://www.cnblogs.com/hyuganatsu/p/NSFileHandle.html
Copyright © 2020-2023  润新知