IO操作
读文件
- 打开文件
- 读取数据
- 关闭文件
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))
}
写入数据
- 打开文件
- 写入数据
- 关闭文件
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()