Lecture de données écrites dans un fichier temporaire dans Go
Dans Go, la création et la lecture à partir d'un fichier temporaire peuvent présenter des défis. Considérez le code de test simplifié suivant :
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) } }
Pendant que le code crée et écrit correctement dans le fichier temporaire, la tentative de lecture donne une sortie vide. En effet, l'opération d'écriture déplace le pointeur vers la fin du fichier. Pour lire les données, nous devons revenir au début.
Solution :
Pour résoudre ce problème, ajoutez tmpFile.Seek(0, 0) pour déplacer le pointeur revient au début du fichier avant de tenter de lire :
tmpFile.Seek(0, 0) s := bufio.NewScanner(tmpFile) for s.Scan() { fmt.Println(s.Text()) }
Avec cette modification, le code lit et imprime correctement les données. N'oubliez pas de fermer le fichier en utilisant defer tmpFile.Close() avant de quitter pour garantir une bonne gestion des ressources.
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!