Lecture de données venant d'être écrites dans un fichier temporaire
Dans Go, il peut être difficile de lire des données venant d'être écrites dans un fichier temporaire. Même si les données peuvent être écrites avec succès, les tentatives de lecture immédiate peuvent échouer. En effet, l'opération d'écriture déplace le pointeur de fichier vers la fin du fichier.
Pour résoudre ce problème, il est nécessaire de ramener le pointeur de fichier au début avant de tenter de lire les données. Cela permet à l'opération de lecture de démarrer à partir du premier octet du fichier.
Exemple de mise en œuvre :
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) } }
Dans cet exemple révisé, après avoir écrit des données dans le fichier temporaire fichier, le pointeur de fichier est réinitialisé au début avec tmpFile.Seek(0, 0) avant de tenter de lire. Cela garantit que le scanner lit les données depuis le début du fichier, comme prévu.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!