读取刚刚写入临时文件的数据
在 Go 中,读取刚刚写入临时文件的数据可能具有挑战性。虽然数据可能会成功写入,但尝试立即读取数据可能会失败。这是因为写入操作将文件指针移动到文件末尾。
要解决此问题,需要在尝试读取数据之前将文件指针返回到开头。这允许读取操作从文件的第一个字节开始。
示例实现:
import ( "bufio" "fmt" "io/ioutil" "log" "os" "path/filepath" ) func main() { tmpFile, err := ioutil.TempFile("", fmt.Sprintf("%s-", filepath.Base(os.Args[0]))) if err != nil { log.Fatal("Could not create temporary file", err) } defer tmpFile.Close() // Close the file before exiting fmt.Println("Created temp file:", tmpFile.Name()) fmt.Println("Writing some data to the temp file") if _, err = tmpFile.WriteString("test data"); err != nil { log.Fatal("Unable to write to temporary file", err) } else { fmt.Println("Data should have been written") } fmt.Println("Trying to read the temp file now") // Seek the pointer to the beginning tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } if err = s.Err(); err != nil { log.Fatal("error reading temp file", err) } }
在这个修改后的示例中,将数据写入临时文件后文件,在尝试读取之前,文件指针会通过 tmpFile.Seek(0, 0) 重置到开头。这可确保扫描仪按预期从文件开头读取数据。
以上是Go中如何读取刚写入临时文件的数据?的详细内容。更多信息请关注PHP中文网其他相关文章!