欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go语言复制文件

程序员文章站 2022-06-14 21:43:48
需要使用io包的Copy方法 还可以使用下面的方法 ......

需要使用io包的copy方法

package main

import (
    "fmt"
    "io"
    "os"
)

//自己编写一个函数,接收两个文件路径 srcfilename dstfilename
func copyfile(dstfilename string, srcfilename string) (written int64, err error) {

    srcfile, err := os.open(srcfilename)

    if err != nil {
        fmt.printf("open file err = %v\n", err)
        return
    }

    defer srcfile.close()

    //打开dstfilename

    dstfile, err := os.openfile(dstfilename, os.o_wronly | os.o_create, 0755)
    if err != nil {
        fmt.printf("open file err = %v\n", err)
        return
    }

    defer dstfile.close()

    return io.copy(dstfile, srcfile)

}

func main() {

    result, err := copyfile("./src/main/dst.png", "./src/main/file.png")

    if err == nil {
        fmt.println("拷贝成功!,拷贝的字节数为: ", result)
    }
}

还可以使用下面的方法

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

//自己编写一个函数,接收两个文件路径 srcfilename dstfilename

func copyfile(dstfilename string, srcfilename string) (written int64, err error) {

    srcfile, err := os.open(srcfilename)

    if err != nil {
        fmt.printf("open file err = %v\n", err)
        return
    }

    defer srcfile.close()

    //通过srcfile,获取到reader
    reader := bufio.newreader(srcfile)

    //打开dstfilename
    dstfile, err := os.openfile(dstfilename, os.o_wronly | os.o_create, 0666)
    if err != nil {
        fmt.printf("open file err = %v\n", err)
        return
    }

    writer := bufio.newwriter(dstfile)
    defer func() {
        writer.flush() //把缓冲区的内容写入到文件
        dstfile.close()

    }()

    return io.copy(writer, reader)

}

func main() {

    result, err := copyfile("./src/main/dst.png", "./src/main/file.png")

    if err == nil {
        fmt.println("拷贝成功!拷贝的字节大写为: ", result)
    }
}