mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 02:35:53 +08:00
Fixed a that if dstName file's length longer than srcName file io.Copy will cover only part content of srcName file. If file srcName 's content is "abc", dstName's content is "1234" ,the result of io.Copy(dst, src) is "abc4" not "abc"
950 B
950 B
12.3 文件拷贝
如何拷贝一个文件到另一个文件?最简单的方式就是使用 io 包:
示例 12.10 filecopy.go:
// filecopy.go
package main
import (
"fmt"
"io"
"os"
)
func main() {
CopyFile("target.txt", "source.txt")
fmt.Println("Copy done!")
}
func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
}
defer src.Close()
dst, err := os.Create(dstName)
if err != nil {
return
}
defer dst.Close()
return io.Copy(dst, src)
}
注意 defer
的使用:当打开目标文件时发生了错误,那么 defer
仍然能够确保 src.Close()
执行。如果不这么做,文件会一直保持打开状态并占用资源。