在前面的篇章中,我们直到了如何创建文件、打开文件、写入文件、读取文件,下面来一个综合的案例。
编写一个函数:文件拷贝,将已有的文件复制一份,同时重新命名。
(1) 让用户输入要拷贝的文件的名称(源文件)以及目的文件的名称
(2) 创建目的文件
(3) 打开源文件,并且读取该文件中的内容
(4) 将从源文件中读取的内容写到目的文件中。
package main
import (
"fmt"
"io"
"os"
)
// 文件拷贝,将已有的文件复制一份,同时重新命名
func CopyFile(srcFile string, dstFile string) {
//1.创建目标文件
dst, err := os.Create(dstFile)
if err != nil { // 如果有错误,打印错误,同时返回
fmt.Println("err = ", err)
return
}
//2.打开源文件,并且读取该文件中的内容
src, err := os.Open(srcFile)
if err != nil {
fmt.Println("err1 = ", err)
return
}
//读取文件全部内容
buf := make([]byte, 1024*2) // 2k大小
n, err := src.Read(buf) //n代表从文件读取内容的长度
if err != nil && err != io.EOF { // 文件出错,同时没有到结尾
fmt.Println("err = ", err)
return
}
//保存内容
content := string(buf[:n])
//3.将从源文件中读取的内容写到目的文件中
// 直接写入全部内容的方式
n, err = dst.WriteString(content)
// 打印写入数据的错误信息
if err != nil {
fmt.Println("写入数据的错误信息:", err)
}
fmt.Println("写入数据的长度:", n)
//4.关闭文件
defer dst.Close()
defer src.Close()
}
func main() {
var filePath = "a.txt"
var dstPath = "b.txt"
CopyFile(filePath, dstPath)
}