Maison >développement back-end >Golang >Comment puis-je détecter les modifications de fichiers dans Go à l'aide de l'interrogation d'état ?

Comment puis-je détecter les modifications de fichiers dans Go à l'aide de l'interrogation d'état ?

DDD
DDDoriginal
2024-12-02 21:31:16728parcourir

How Can I Detect File Changes in Go Using Status Polling?

Détecter les modifications de fichiers dans Go à l'aide de l'interrogation d'état

Dans Go, vous pouvez détecter lorsqu'un fichier change à l'aide de l'interrogation d'état. Bien que Go n'offre pas d'équivalent direct à la fonction Unix fcntl() pour les notifications de modifications de fichiers, l'interrogation d'état fournit une solution multiplateforme :

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
}

Utilisation :

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

Ceci La solution n'offre pas l'efficacité d'un appel système mais propose une approche simple qui fonctionne sur toutes les plateformes et peut suffire à divers cas d'utilisation.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn