今天学习了使用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)
	}
}

备注说明