go 语言文件操作:拷贝文件 | go 技术论坛-380玩彩网官网入口

拷贝文件-文件读写操作

学习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
(= ̄ω ̄=)··· 暂无内容!

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