Maison > développement back-end > Golang > Comment puis-je détecter les modifications de fichiers dans Go de manière multiplateforme ?

Comment puis-je détecter les modifications de fichiers dans Go de manière multiplateforme ?

Patricia Arquette
Libérer: 2024-12-04 12:00:27
original
716 Les gens l'ont consulté

How Can I Detect File Changes in Go in a Cross-Platform Way?

Détecter les modifications de fichiers dans Go : une solution pratique

Le langage Go offre des fonctionnalités étendues pour la gestion des fichiers, mais la détection des modifications de fichiers n'est pas aussi simple comme dans les systèmes Unix. Pour résoudre ce problème, explorons une approche multiplateforme qui exploite le package os.

Détection des modifications de fichiers

Le package os offre un moyen pratique d'obtenir les attributs des fichiers, y compris sa taille et l'heure de la dernière modification. En comparant périodiquement ces attributs, vous pouvez identifier quand un fichier a été modifié.

L'extrait de code suivant montre comment implémenter la détection des modifications de fichier :

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
}
Copier après la connexion

Utilisation et considérations

Pour utiliser cette fonction, transmettez simplement le chemin du fichier que vous souhaitez surveiller. La fonction vérifiera en permanence les attributs du fichier et vous avertira lorsqu'elle détectera des modifications. Voici un exemple d'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
Copier après la connexion

Bien que cette approche ne soit pas aussi efficace que les appels système comme fcntl(), elle est simple et fonctionne de manière fiable sur toutes les plates-formes. Cela peut être particulièrement utile lorsque vous n'avez pas accès aux fonctions système de bas niveau.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal