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 //結果