文件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() //关闭文件
我们需要注意以下几点:
- 我们要展示写入内容需要使用Seek函数把文件偏移到开始位置。再使用Read函数读取
- string类型的函数可以用[ ]byte强制转换,[]byte类型也可以强制转换成string类型
- 我们使用os.Stdout.Write调用,就是使用标准输出,在进程内默认打开一个文件描述符,打印到屏幕
- 在文件打开后一定要关闭,最好是使用defer延时执行函数的调用,懂得收尾是程序员编码中非常重要的一个习惯
本文正在参加技术专题18期-聊聊Go语言框架