Golang命令列拷貝檔案

OldBoy~發表於2018-09-15
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  //結果

 

相關文章