Lesen von Daten, die in Go in eine temporäre Datei geschrieben wurden
In Go kann das Erstellen und Lesen aus einer temporären Datei eine Herausforderung darstellen. Betrachten Sie den folgenden vereinfachten Testcode:
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) } }
Während der Code die temporäre Datei korrekt erstellt und in sie schreibt, führt der Leseversuch zu einer leeren Ausgabe. Dies liegt daran, dass der Schreibvorgang den Zeiger an das Ende der Datei verschiebt. Um die Daten zu lesen, müssen wir zum Anfang zurückgehen.
Lösung:
Um dieses Problem zu beheben, fügen Sie tmpFile.Seek(0, 0) zum Verschieben hinzu den Zeiger zurück zum Anfang der Datei, bevor versucht wird, Folgendes zu lesen:
tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) }
Mit dieser Änderung liest und druckt der Code die Daten korrekt. Denken Sie daran, die Datei vor dem Beenden mit defer tmpFile.Close() zu schließen, um eine ordnungsgemäße Ressourcenverwaltung sicherzustellen.
Das obige ist der detaillierte Inhalt vonWie lese ich in Go in eine temporäre Datei geschriebene Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!