Gestion des opérations de lecture et d'écriture de fichiers avec un seul fichier *os.File dans Go
Cette question met en évidence un défi courant dans le travail avec des fichiers dans Go, où l'écriture dans un fichier déplace le pointeur de position actuelle, empêchant potentiellement les opérations de lecture ultérieures de récupérer les données attendues.
Dans le code fourni, le programme vise à écrivez 10 lignes de texte dans un fichier nommé "test.txt", puis relisez-les. Cependant, le code ne lit aucune donnée et affiche en permanence « Terminé » en raison d'une erreur io.EOF.
Pour comprendre le problème, il est crucial de noter que l'écriture dans un fichier os.File modifie le fichier. pointeur de position. Après avoir terminé la boucle d'écriture, le pointeur se situe à la fin du fichier. Lorsque le programme tente de lire le fichier, il démarre à la position actuelle. Puisque le pointeur est à la fin, il rencontre instantanément io.EOF, signifiant la fin du fichier.
Pour remédier à ce problème, il faut réinitialiser le pointeur de position du fichier au début avant de tenter de lire. Ceci peut être réalisé en utilisant la méthode Seek, comme démontré dans le code modifié ci-dessous :
package main import ( "bufio" "fmt" "io" "os" ) 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) } // reset file pointer _, err := f.Seek(0, 0) if err != nil { fmt.Println("Error", err) } // 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)) } }
En gérant correctement le pointeur de position du fichier, le programme peut désormais lire avec succès les données écrites du fichier.
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!