Résoudre les problèmes de lecture dans la gestion des fichiers temporaires de Go
Dans Go, accéder aux données d'un fichier temporaire immédiatement après y avoir écrit peut s'avérer difficile bloc. Voici une description détaillée du problème et de la solution :
Le problème :
ioutil.TempFile de Go crée un fichier temporaire et l'ouvre en lecture et en écriture. Bien que les données puissent être écrites avec succès dans ce fichier, les opérations de lecture ultérieures échouent. En effet, le descripteur de fichier pointe vers la fin du fichier après l'écriture.
La solution :
Pour remédier à ce problème, le descripteur de fichier doit être replacé vers le début du fichier avant de tenter de le lire. Ceci peut être réalisé en utilisant la méthode Seek de *os.File. En ajoutant tmpFile.Seek(0, 0) avant l'opération de lecture, le pointeur de fichier est réinitialisé au début du fichier.
Exemple de code :
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) } defer tmpFile.Close() 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) } }
Considérations supplémentaires :
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!