Go 语言文件操作:拷贝文件 1 个改进

拷贝文件-文件读写操作

学习c语言时,有写过类似cp的程序,实现文件拷贝,按照以下步骤走

  1. 打开源文件
  2. 读取源文件内容
  3. 创建目标文件
  4. 将源文件的内容写到目标文件中去
  5. 关闭文件

1 使用上述步骤,实现文件拷贝

示例代码

func main() {
    //需要有源文件路径,和目标文件路径
    if len(os.Args) != 3 {
        panic("参数出错")
    }

    src := os.Args[1]  //源文件路径
    dest := os.Args[2] //目标文件路径

    srcFileHandler, err := os.Open(src)
    checkErr(err)
    defer srcFileHandler.Close()

    //获取源文件内容
    fileContents, err := ioutil.ReadAll(srcFileHandler)
    checkErr(err)

    //若dest存在.则不执行操作
    _, err = os.Stat(dest)
    if nil == err {
        fmt.Println("您要执行拷贝的目标文件已存在,请更改目标文件路径")
        return
    }

    //创建目标文件操作句柄
    destFileHandler, err := os.Create(dest)
    checkErr(err)
    defer destFileHandler.Close()

    _, err = destFileHandler.Write(fileContents)
    checkErr(err)

    fmt.Printf("将%s拷贝到%s成功\n", src, dest)
}

运行结果

PS D:\GoPractice> go run .\filecopy\main.go .\filecopy\test.html .\filecopy\test.html.copy
将.\filecopy\test.html拷贝到.\filecopy\test.html.copy成功

拷贝文件

2 使用io包

io包有提供拷贝的方法,且执行效率可能比我们自己写的要高

示例代码

func main() {
    //需要有源文件路径,和目标文件路径
    if len(os.Args) != 3 {
        panic("参数出错")
    }

    src := os.Args[1]  //源文件路径
    dest := os.Args[2] //目标文件路径
    ioCopy(src, dest)

    fmt.Printf("将%s拷贝到%s成功\n", src, dest)
}

func ioCopy(src, dest string) {
    srcFileHandler, err := os.Open(src)
    checkErr(err)
    defer srcFileHandler.Close()

    //创建目标文件操作句柄
    destFileHandler, err := os.Create(dest)
    checkErr(err)
    defer destFileHandler.Close()

    _, err = io.Copy(destFileHandler, srcFileHandler)
    checkErr(err)
}

func checkErr(err error) {
    if nil != err {
        panic(err)
    }
}

运行结果

#同上例
PS D:\GoPractice> go run .\filecopy\main.go .\filecopy\test.html .\filecopy\test.html.copy
将.\filecopy\test.html拷贝到.\filecopy\test.html.copy成功

结尾

这里笔者只是给出简单的例子实现,具体一些问题可能没考虑很多

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!