Skip to main content

IO操作

读文件

  1. 打开文件
  2. 读取数据
  3. 关闭文件
func main()  {

//1. 打开文件
//2. 读取数据
//3. 关闭文件

//1. 打开文件
fileName := `E:/GoProjects/demo1/go.mod`
file,err := os.Open(fileName)

if err != nil{
fmt.Println("错误为:",err)
}
//3. 关闭文件
defer file.Close()

//2. 读取数据
bs := make([]byte,4)
n,err := file.Read(bs)
fmt.Println(err)
fmt.Println(n)
fmt.Println(string(bs))


//继续读取数据
n,err = file.Read(bs)
fmt.Println(err)
fmt.Println(n)
fmt.Println(string(bs))

}

写入数据

  1. 打开文件
  2. 写入数据
  3. 关闭文件
package main

import (
"fmt"
"os"
)

func main() {

//1. 打开文件
//2. 写入数据
//3. 关闭文件

//1. 打开文件
fileName := `E:/GoProjects/demo1/aaa`
file,err := os.OpenFile(fileName,os.O_CREATE|os.O_WRONLY|os.O_APPEND,os.ModePerm)

if err != nil{
fmt.Println("错误为:",err)
}
//3. 关闭文件
defer file.Close()

//2. 写入数据
bs := []byte{65,75,54,65,88}
n,err := file.Write(bs[:2])
fmt.Println(err)
fmt.Println(n)
fmt.Println(string(bs))

file.WriteString("你好他也好")
}

os.O_APPEND 追加写入 n,err := file.Write(bs[:2]) 切片部分写入

复制文件的方法

  • io.Copy()
  • io.CopyN()
  • io.CopyBuffer()

断点续传

原理:创建一个临时文件用来记录,文件传输时,已经传输的字节数,也就是光标的位置。如果传输中断,下次再传的时候,先从临时文件读取已经传输了多少数据,再从文件的光标位置开始读取,从目标文件光标位置开始写入。

Seek()