GO语言-文件IO处理2

205 阅读2分钟

文件IO处理

Seek函数

Seek函数的作用是调整文件读写位置。我们接下俩详细讲解一下Seek函数

func (f *File) Seek(offset int64, whence int) (ret int64, err error) {
   if err := f.checkValid("seek"); err != nil {
      return 0, err
   }
   r, e := f.seek(offset, whence)
   if e == nil && f.dirinfo != nil && r != 0 {
      e = syscall.EISDIR
   }
   if e != nil {
      return 0, f.wrapErr("seek", e)
   }
   return r, nil
}

参数含义:

  • offset: 偏移量
  • whence:调整的位置,有三个值可以选择。
  • os.SEEK_SET:文件头
  • os.SEEK_CUR:当前位置
  • os.SEEK_END:结束位置。

Seek是通过whence+offset的组合来调整文件的读写位置。 代码示例:

Seek(20,os.SEEK_SET)  //从文件头偏移20个字节的位置
Seek(0.os.SEEK_END)  //偏移文件到结束位置
SEEK(0,os.SEEk_SET)  //偏移文件到开始位置

然后我们把之前学的结合起来应用到示例中···

示例

func main(){
        //创建文件
    fd,err:=os.OpenFile("a.txt",os.O_RDWR|os.O_CREATE|os.O_TRUNC,0666)
    if err !=nil{
    fmt.Println("打开文件失败,错误原因:",err)
    return
}
     //写入字符串
     n,err:=fd.WriteString("全民制作人们大家好!!\n")
      if err !=nil{
    fmt.Println("写入文件,错误原因:",err)
    return
}
    fmt.Println("写入成功")
    //调整文件的读写位置
    fd.Seek(0,SEEK_SET)
    //构建一个缓冲区
    bu:=make([]byte,20)
    //读取文件内容
    n,err=fd.Read(bu)  
    os.Stdout.Write(buf) //标准输出
  defer  fd.Close()      //关闭文件
    

我们需要注意以下几点:

  1. 我们要展示写入内容需要使用Seek函数把文件偏移到开始位置。再使用Read函数读取
  2. string类型的函数可以用[ ]byte强制转换,[]byte类型也可以强制转换成string类型
  3. 我们使用os.Stdout.Write调用,就是使用标准输出,在进程内默认打开一个文件描述符,打印到屏幕
  4. 在文件打开后一定要关闭,最好是使用defer延时执行函数的调用,懂得收尾是程序员编码中非常重要的一个习惯

本文正在参加技术专题18期-聊聊Go语言框架