1 回答
TA贡献1744条经验 获得超4个赞
我在这里看到的问题是您没有将文件句柄的光标倒回到文件的开头。因此,下一次读取将在文件末尾,并且将是 0 字节读取。这就解释了为什么文件中似乎没有内容。
https://pkg.go.dev/os#File.Seek可以为您处理。
实际上,这Flush
无关紧要,因为您使用相同的文件句柄来读取文件而不是写入文件,因此即使没有刷新,您也会看到自己写入的字节。如果文件由不同的进程打开或重新打开,则不会出现这种情况。
编辑:OP声称在他们的情况下这种冲洗是必要的,我不能提供不同意的证据。冲洗也不会伤害任何东西。
示范:
package main
import (
"fmt"
"io"
"os"
)
func main() {
f, err := os.CreateTemp("", "data.csv")
if err != nil {
panic(err)
} else {
defer f.Close()
defer os.Remove(f.Name())
}
fmt.Fprintf(f, "hello, world")
fmt.Fprintln(os.Stderr, "Before rewind: ")
if _, err := io.Copy(os.Stderr, f); err != nil {
panic(err)
}
f.Seek(0, io.SeekStart)
fmt.Fprintln(os.Stderr, "\nAfter rewind: ")
if _, err := io.Copy(os.Stderr, f); err != nil {
panic(err)
}
fmt.Fprintln(os.Stderr, "\n")
}
% go run t.go
Before rewind:
After rewind:
hello, world
- 1 回答
- 0 关注
- 94 浏览
添加回答
举报