ackage main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
file1, err1 := os.Open("xxxxxx.mp4") // 只读方式打开文件
if err1 != nil { // 文件打开错误
fmt.Println("打开原文件错误!")
}
// os.O_WRONLY,写模式;os.O_CREATE,文件不存在时创建;0666为权限。
file2, err2 := os.OpenFile("yyyy.mp4", os.O_WRONLY|os.O_CREATE, 0666)
if err2 != nil { // 文件打开错误
fmt.Println("打开目标文件错误!")
}
defer func() { // 延迟关闭文件
file1.Close()
file2.Close()
}()
read := bufio.NewReader(file1) // 创建读取器
write := bufio.NewWriter(file2) // 创建写
// 创建读取缓存。
// 数值越大,一次读取的数据量越大,占用内存越大,读取次数减少,读取越快。
// 数值越小,一次读取的数据量越小,占用内存越小,读取次数增加,读取越慢。
buf := make([]byte, 1024)
for { // 循环读取数据
n, err3 := read.Read(buf) // 读取数据到缓存,n为读取到的数据长度
if err3 != nil { // 读取错误
if err3 == io.EOF { // 读取完毕
write.Flush() // 保存最后一次读取的数据
fmt.Println("文件复制完毕!")
} else {
fmt.Println("文件读取错误!")
}
break // 结束读取循环
}
_, err4 := write.Write(buf[:n]) // 循环写入文件
if err4 != nil {
fmt.Println("写文件错误!")
}
}
}
golang使用SQLite数据库对指定扩展名文件进行批量加密(五、大文件读写,复制功能)
于 2022-01-20 09:53:17 首次发布