file - 写入文件然后立即读回

标签 file go io

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

这是代码

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 复制源文件,这会创建一个空的目标文件。

最佳答案

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

source.Seek(0, io.SeekStart)

关于file - 写入文件然后立即读回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52655571/

相关文章:

java - 使用 UTF-8 编码创建并写入文件

具有 bazel 构建的 protobuf 依赖项的 Google 云函数

go - 创建 C 结构数组并将结构指针传递给 C 函数

go - 读取文本文件中的最后一行

haskell - 在编程语言解释器运行时使用 unsafePerformIO

linux - 在 bash 中读取/dev/input/eventX

C++ 将所有文件从一个目录移动到另一个目录

c# - 我应该如何保存 HttpPostedFile

file - Dart - 如何获取文件的创建时间?

c - 从 C 中的文件读取和打印时出现奇怪的输出