我想向文件写入一些内容,然后从同一个 *os.File 指针读取它们。但是什么都没读
package main
import (
"bufio"
"fmt"
"io"
"os"
)
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))
}
}
程序总是打印“完成”文本
最佳答案
当您写入 os.File
时,它会移动当前文件位置指针。这意味着在写入文件循环之后,文件指针位于文件末尾。
现在,如果您尝试从文件中读取,您会立即获得 io.EOF
,因为您位于文件的末尾。
要解决它,您必须 Seek
在读取文件之前先到文件的开头。
_, err := f.Seek(0, 0)
if err != nil {
fmt.Println("Error", err)
}
关于file - 在 Go 中使用相同的 *os.File 写入和读取文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64925992/