在 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中文網其他相關文章!