写入文件,然后立即将其读回

时间:2018-10-04 21:42:40

标签: file go io

正如标题所说,我在读之前已读回的文件存在问题。 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复制源文件,这将创建一个空的目标文件。

1 个答案:

答案 0 :(得分:3)

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

source.Seek(0, io.SeekStart)