在 Go 中读取和写入同一文件
在 Go 中,使用 os.File 类型使文件操作变得简单。但是,尝试读取和写入同一文件指针时可能会出现问题。本文针对这种情况并提供了解决方案。
问题:
您正在尝试将数据写入文件,然后从同一文件中读回它指针。但是,读取操作不会返回任何内容。
代码:
func main() { filename := "test.txt" f, _ := os.OpenFile(filename, os.O_CREATE|os.O_TRUNC|os.O_RDWR, os.ModePerm) defer os.Remove(filename) // Write 10 times for i := 0; i < 10; i++ { fmt.Fprintf(f, "test%d\n", i) } // Read 10 times r := bufio.NewReader(f) for i := 0; i < 10; i++ { str, _, err := r.ReadLine() if err != nil { if err == io.EOF { fmt.Println("Done") return } fmt.Println("Error", err) } fmt.Println("Read", string(str)) } }
问题:
在提供的代码中,写操作后,文件指针移至文件末尾。当尝试读取操作时,它会立即遇到文件末尾,从而导致 io.EOF 错误。
解决方案:
要解决此问题,您在读取之前必须手动将文件指针查找回开头。
_, err := f.Seek(0, 0) if err != nil { fmt.Println("Error", err) }
此代码片段在读取之前添加了一个 Seek 操作 环形。它将文件指针设置为文件的开头,允许后续的读取操作检索写入的数据。
以上是为什么写入同一个 Go 文件指针后读取没有任何返回?的详细内容。更多信息请关注PHP中文网其他相关文章!