Go语言 io.Copy不在操作系统之间复制数据,文件类型[重复]

cl25kdpy  于 11个月前  发布在  Go
关注(0)|答案(1)|浏览(73)

这个问题已经有答案了

Open a file and write some word then read it get nothing(1个回答)
两年前关闭。
我创建2个文件从代码使用os。创建功能。
我写一些字符串到file 1,然后试图复制file 1的内容到file 2使用io.Copy,但它不工作。
没有抛出错误。有人能告诉我这里发生了什么吗?谢谢。
Playground链接-https://play.golang.org/p/lv_2VfsNIfI

package main

import (
    "io"
    "io/ioutil"
    "log"
    "os"
)

func main() {

    file1, err := os.Create("file1")
    if err != nil {
        log.Fatal(err)
    }
    file1.WriteString("Some test data")
    defer file1.Close()
    defer os.Remove(file1.Name())

    log.Println("File1 Data : ", readFile(file1.Name()))

    file2, err := os.Create("file2")
    if err != nil {
        log.Fatal(err)
    }
    defer file2.Close()
    defer os.Remove(file2.Name())

    w, err := io.Copy(file2, file1)
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Copied", w)

    log.Println("File2 Data : ", readFile(file2.Name()))
}

func readFile(fname string) string {
    data, err := ioutil.ReadFile(fname)
    if err != nil {
        log.Fatal(err)
    }

    return string(data)
}

字符串
我得到的输出,

2009/11/10 23:00:00 File1 Data :  Some test data
2009/11/10 23:00:00 Copied 0
2009/11/10 23:00:00 File2 Data :

kgqe7b3p

kgqe7b3p1#

您需要使用file1.Seek(0,io.SeekStart)返回到file1的开头,因为文件光标位于写入数据的末尾。
Seek函数接收两个参数:

offset类型int64:表示文件指针移动的字节数。

int类型的whence:用于确定偏移量的参考点。它可以取三个值之一:io.SeekStart,io.SeekCurrent或io. SeekEnd。这些值分别指示偏移量应该从文件的开头,当前位置或结尾计数。

...
file1.WriteString("Some test data")
file.Seek(0,io.SeekStart)
defer file1.Close()
...

字符串
Go标准库文档链接
io.Seekio.StartSeek

相关问题