在Go 中讀取寫入臨時檔案的資料
在Go 中,建立和讀取臨時檔案可能會帶來挑戰。考慮以下簡化的測試程式碼:
package main 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) } fmt.Println("Created temp file:", tmpFile.Name()) defer tmpFile.Close() 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") s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) } err = s.Err() if err != nil { log.Fatal("error reading temp file", err) } }
雖然程式碼正確建立並寫入臨時文件,但嘗試讀取空輸出中的結果。這是因為寫入操作將指標移動到文件末尾。要讀取數據,我們需要回溯到開頭。
解決方案:
要解決此問題,請添加tmpFile.Seek(0, 0) 移動在嘗試讀取之前將指針返回到文件的開頭:
tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) }
透過此修改,程式碼讀取並列印資料正確。請記得在退出之前使用 defer tmpFile.Close() 關閉文件,以確保正確的資源管理。
以上是如何在 Go 中讀取寫入暫存檔案的資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!