Lesen von Daten, die gerade in eine temporäre Datei geschrieben wurden
In Go kann es schwierig sein, Daten zu lesen, die gerade in eine temporäre Datei geschrieben wurden. Während die Daten möglicherweise erfolgreich geschrieben werden, können Versuche, sie sofort zu lesen, fehlschlagen. Dies liegt daran, dass der Schreibvorgang den Dateizeiger an das Ende der Datei verschiebt.
Um dieses Problem zu beheben, ist es notwendig, den Dateizeiger zurück zum Anfang zu suchen, bevor versucht wird, die Daten zu lesen. Dadurch kann der Lesevorgang ab dem ersten Byte der Datei beginnen.
Beispielimplementierung:
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) } }
In diesem überarbeiteten Beispiel nach dem Schreiben von Daten in die temporäre Datei Datei wird der Dateizeiger vor dem Leseversuch mit tmpFile.Seek(0, 0) auf den Anfang zurückgesetzt. Dadurch wird sichergestellt, dass der Scanner die Daten wie vorgesehen vom Anfang der Datei liest.
Das obige ist der detaillierte Inhalt vonWie lese ich Daten, die gerade in Go in eine temporäre Datei geschrieben wurden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!