今天学习了使用golang实现一个简单的文件拷贝功能, 可以拷贝一个文件,图片,视频或者音频,分享给正在学习go语言的朋友…
实现从E盘拷贝一个pdf 到 e:/Go/tools/目录下面
文件大小:25.5 M
srcFile := “e:/copyFileTest02.pdf” – 源文件路径
dstFile := “e:/Go/tools/copyFileTest02.pdf” – 目标文件路径
知识点总结
1, 使用了带缓存的 bufio.NewReader(srcFile) 和 bufio.NewWriter(dstFile),一边读一边写,这样支持拷贝较大的文件;
2,defer dstFile.Close() 切记使用defer 来关闭打开的文件,避免内存泄漏;
3,自己成功测试了copy一个word文件和pdf文件。
源代码参考
package main
import (
"bufio"
"fmt"
"io"
"os"
)
// 编写一个函数,接收两个文件路径:
func copyFile(dstFileName string, srcFileName string) (written int64, err error) {
srcFile, err := os.Open(srcFileName)
if err != nil {
fmt.Printf("open file error = %v\n", err)
}
defer srcFile.Close()
//通过srcFile,获取到READER
reader := bufio.NewReader(srcFile)
//打开dstFileName
dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Printf("open file error = %v\n", err)
return
}
//通过dstFile,获取到WRITER
writer := bufio.NewWriter(dstFile)
//writer.Flush()
defer dstFile.Close()
return io.Copy(writer, reader)
}
func main() {
//调用copyFile完成文件拷贝
srcFile := "e:/copyFileTest02.pdf"
dstFile := "e:/Go/tools/copyFileTest02.pdf"
_, err := copyFile(dstFile, srcFile)
if err == nil {
fmt.Println("拷贝文件正常...")
} else {
fmt.Printf("拷贝文件出错了... err =%v\n", err)
}
}
备注说明