Détection des modifications de fichiers dans Go
La détection des modifications de fichiers est cruciale pour diverses applications, telles que l'édition de fichiers, le contrôle de version et la surveillance de l'intégrité des données. . Dans Go, la bibliothèque standard ne fournit pas d'équivalent direct à la fonction fcntl() d'Unix pour les notifications de modifications de fichiers. Cependant, il existe des approches alternatives pour accomplir cette tâche.
Une solution multiplateforme consiste à utiliser la fonction os.Stat() pour comparer la taille actuelle et l'heure de modification d'un fichier avec son état initial obtenu au début. du processus de surveillance. Si une divergence est constatée, le fichier est considéré comme modifié. Un exemple d'implémentation de cette approche :
func watchFile(filePath string) error { initialStat, err := os.Stat(filePath) if err != nil { return err } for { stat, err := os.Stat(filePath) if err != nil { return err } if stat.Size() != initialStat.Size() || stat.ModTime() != initialStat.ModTime() { break } time.Sleep(1 * time.Second) } return nil }
Cette fonction peut être utilisée de la manière suivante :
doneChan := make(chan bool) go func(doneChan chan bool) { defer func() { doneChan <- true }() err := watchFile("/path/to/file") if err != nil { fmt.Println(err) } fmt.Println("File has been changed") }(doneChan) <-doneChan
Bien que cette approche offre simplicité et compatibilité multiplateforme, elle peut ne pas être la solution la plus efficace pour les scénarios où les modifications de fichiers sont fréquentes. Pour les applications nécessitant des performances plus élevées, des solutions spécifiques à la plate-forme utilisant des appels système ou des observateurs de fichiers peuvent valoir la peine d'être explorées.
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!