Lecture et écriture dans le même fichier dans Go
Dans Go, travailler avec des fichiers est simplifié grâce au type os.File. Cependant, un problème peut survenir lorsque vous essayez de lire et d’écrire sur le même pointeur de fichier. Cet article aborde un tel scénario et propose une solution.
Problème :
Vous essayez d'écrire des données dans un fichier, puis de les relire à partir du même fichier. aiguille. Cependant, l'opération de lecture ne renvoie rien.
Code :
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) } // 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)) } }
Problème :
Dans le code fourni, le pointeur de fichier est déplacé à la fin du fichier après l'opération d'écriture. Lorsque l'opération de lecture est tentée, elle rencontre immédiatement la fin du fichier, ce qui entraîne une erreur io.EOF.
Solution :
Pour résoudre ce problème, vous doit rechercher manuellement le pointeur de fichier vers le début avant de le lire.
_, err := f.Seek(0, 0) if err != nil { fmt.Println("Error", err) }
Cet extrait de code ajoute une opération de recherche avant la boucle de lecture. Il place le pointeur de fichier au début du fichier, permettant à l'opération de lecture ultérieure de récupérer les données écrites.
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!