开放的编程资料库

当前位置:我爱分享网 > Go教程 > 正文

Go复制文件

Go复制文件教程展示了如何在Golang中复制文件。我们展示了三种在Go中复制文件的方法。

我们使用ioutil.ReadFile,ioutil.WriteFile,io.Copy,File.Read,File.Write函数复制文件。

$ go version
go version go1.18.1 linux/amd64

我们使用Go版本1.18。

复制文件示例

在第一个示例中,我们使用了ioutil包中的函数。

package main

import (
    "io/ioutil"
    "log"
)

func main() {

    src := "words.txt"
    dest := "words2.txt"

    bytesRead, err := ioutil.ReadFile(src)

    if err != nil {
        log.Fatal(err)
    }

    err = ioutil.WriteFile(dest, bytesRead, 0644)

    if err != nil {
        log.Fatal(err)
    }
}

ioutil.ReadFile读取指定的文件并返回字节片中的内容。ioutil.WriteFile将指定的字节片写入目标文件。

Go复制文件示例二

在第二个例子中,我们使用io.Copy函数来复制一个文件。

package main

import (
    "io"
    "log"
    "os"
)

func main() {

    src := "words.txt"
    dst := "words2.txt"

    fin, err := os.Open(src)
    if err != nil {
        log.Fatal(err)
    }
    defer fin.Close()

    fout, err := os.Create(dst)
    if err != nil {
        log.Fatal(err)
    }
    defer fout.Close()

    _, err = io.Copy(fout, fin)

    if err != nil {
        log.Fatal(err)
    }
}

我们用os.Open打开源文件,用os.Create创建目标文件;这两个文件的句柄被传递给io.Copy函数。

复制文件示例三

File.Read从文件中读取最多len(b)个字节,其中b是一个字节片段。File.Write函数将提供的字节切片写入目标文件。

package main

import (
    "io"
    "log"
    "os"
)

func main() {

    src := "words.txt"
    dst := "words2.txt"

    buf := make([]byte, 1024)

    fin, err := os.Open(src)
    if err != nil {
        log.Fatal(err)
    }

    defer fin.Close()

    fout, err := os.Create(dst)
    if err != nil {
        log.Fatal(err)
    }

    defer fout.Close()

    for {

        n, err := fin.Read(buf)
        if err != nil && err != io.EOF {
            log.Fatal(err)
        }

        if n == 0 {
            break
        }

        if _, err := fout.Write(buf[:n]); err != nil {
            log.Fatal(err)
        }
    }
}

我们创建了一个1024字节的缓冲区。在for循环中,我们将源文件中的字节读入缓冲区,并将缓冲区写入目标文件。当没有更多数据要读取时,File.Read函数返回0,我们中断循环。

在本教程中,我们在Golang中复制了文件。

列出所有Go教程。

未经允许不得转载:我爱分享网 » Go复制文件

感觉很棒!可以赞赏支持我哟~

赞(0) 打赏