mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 01:55:35 +08:00
46 lines
983 B
Markdown
46 lines
983 B
Markdown
# 12.3 文件拷贝
|
||
|
||
如何拷贝一个文件到另一个文件?最简单的方式就是使用 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)
|