|
@@ -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)
|