【问题标题】:Writing to File then immediately read it back in go写入文件然后立即在 go 中读回
【发布时间】:2018-10-04 21:42:40
【问题描述】:

正如标题所说,我在读取之前写入的文件时遇到问题。读取与EOF 发生恐慌。我调试了各种go内部,似乎由于某种原因它无法从源中读取任何内容,尽管源已同步到文件系统(通过在写入后立即停止程序并检查文件来确认) cat)

这里是代码

source, err := os.Create(DESKTOP + "/source.txt")
myPanic(err)

s := "Hello World\n"
_, err1 := source.Write([]byte(s))

myPanic(err1)
source.Sync()

buff := make([]byte, 56)
_, err2 := source.Read(buff)
myPanic(err2)e

如前所述,source.Sync() 无效,但关闭文件并重新打开它可以解决问题。

os.Create() 的文档指出该文件是使用O_RDWR 创建的,这向我表明以这种方式使用该文件是可以的。我想我一路上错过了一些东西。

为了完整起见:这个例子不是我最初遇到的问题,只是我研究后想出的最简单的案例。

最初我想用os.Copy 复制源文件,这会创建一个空的目标文件。

【问题讨论】:

    标签: file go io


    【解决方案1】:

    您位于文件的末尾,因此从那里读取不会返回任何新数据。寻找文件的开头:

    source.Seek(0, io.SeekStart)
    

    【讨论】:

    • 这就是问题所在。谢谢@JimB
    猜你喜欢
    • 1970-01-01
    • 2018-03-03
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多