package main import ( "fmt" "io" "os" ) func main() { list := os.Args //获取命令行参数 if len(list) != 3 { fmt.Println("usage: xxx srcFile dstFile") return } srcFileName := list[1] //源文件(要拷贝的文件) dstFileName := list[2] //新文件(要拷贝出的新文件名) if srcFileName == dstFileName { fmt.Println("源文件和目的文件名字不能相同") return } //只读方式打开源文件 sF, err1 := os.Open(srcFileName) if err1 != nil { fmt.Println("err1 = ", err1) return } //新建目的文件 dF, err2 := os.Create(dstFileName) if err2 != nil { fmt.Println("err2 = ", err2) return } //操作完毕,需要关闭文件 defer sF.Close() defer dF.Close() //核心处理,从源文件读取内容,往目的文件写,读多少写多少 buf := make([]byte, 4*1024) //4k大小临时缓冲区 for { n, err := sF.Read(buf) //从源文件读取内容 if err != nil { fmt.Println("err = ", err) if err == io.EOF { //文件读取完毕 break } } //往目的文件写,读多少写多少 dF.Write(buf[:n]) } }
D:\goproject\src\main>go run hello.go 1.avi 2.avi //分别是源文件和新文件 err = EOF //结果