问答详情
源自:2-3 读取模块实现

//f.Seek(0, 2)

出错了出错了,注释掉就没事了,centos 7.0

读取时err会等于EOF

提问者:小月肖 2018-04-23 22:00

个回答

  • A_小颖
    2018-04-23 22:52:49
    已采纳

    我这里正常,具体报什么错?把错误信息贴出来呗。

  • _潇潇暮雨
    2018-06-10 11:04:05

    最后一个字节吧

  • 小月肖
    2018-04-23 23:48:57

    如果一开始有数据  seek直接读取到末尾如果文件为空需要先将\n读取

  • 小月肖
    2018-04-23 23:27:13

    我一开始文件里面是有数据的


  • A_小颖
    2018-04-23 23:15:15

    这是正常的把,err==io.EOF 是处理文件到末尾的情况,然后再需要等待日志继续产生。

  • 小月肖
    2018-04-23 23:06:55

    func (r *ReadFromFile) Read(rc chan []byte) {
       //读取数据
    
       f, err := os.Open(r.path)
       if err != nil {
          panic(fmt.Sprintf("open file fail:%s", err.Error()))
       }
    
       //从文件末尾逐行读取文件内容
       f.Seek(0, 2)
    
       rd := bufio.NewReader(f)
    
       for {
    
          line, err := rd.ReadBytes('\n')
    
          if err == io.EOF {
             log.Println(err)
             time.Sleep(500 * time.Millisecond)
             continue
          } else if err != nil {
             panic(fmt.Sprintf("ReadBytes error: %s", err.Error()))
          }
          rc <- line[:len(line)-1]
    
       }
    
    }

    如果注释不

    f.Seek(0, 2)

    则直接在

    line, err := rd.ReadBytes('\n')

    err==io.EOF