• 12.3 文件拷贝

    12.3 文件拷贝

    如何拷贝一个文件到另一个文件?最简单的方式就是使用 io 包:

    示例 12.10 filecopy.go:

    1. // filecopy.go
    2. package main
    3. import (
    4. "fmt"
    5. "io"
    6. "os"
    7. )
    8. func main() {
    9. CopyFile("target.txt", "source.txt")
    10. fmt.Println("Copy done!")
    11. }
    12. func CopyFile(dstName, srcName string) (written int64, err error) {
    13. src, err := os.Open(srcName)
    14. if err != nil {
    15. return
    16. }
    17. defer src.Close()
    18. dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
    19. if err != nil {
    20. return
    21. }
    22. defer dst.Close()
    23. return io.Copy(dst, src)
    24. }

    注意 defer 的使用:当打开目标文件时发生了错误,那么 defer 仍然能够确保 src.Close() 执行。如果不这么做,文件会一直保持打开状态并占用资源。