光子 10 лет назад
Родитель
Сommit
26072be0c1
1 измененных файлов с 44 добавлено и 0 удалено
  1. 44 0
      eBook/12.3.md

+ 44 - 0
eBook/12.3.md

@@ -0,0 +1,44 @@
+# 文件拷贝
+如何拷贝一个文件到另一个文件?最简单的方式就是使用io包:
+
+示例 12.10 [filecopy.go](examples/chapter_12/filecopy.go):
+```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.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
+	if err != nil {
+		return
+	}
+	defer dst.Close()
+
+	return io.Copy(dst, src)
+}
+
+```
+
+注意要使用`defer`:当打开目标文件时发生了错误,那么`defer`仍然能够确保`src.Close()`执行。如果不这么做,那么文件会一直保持打开状态并占用资源。
+
+## 链接
+
+- [目录](directory.md)
+- 上一节:[文件读写](12.2.md)
+- 下一节:[从命令行读取参数](12.4.md)