Heim >Backend-Entwicklung >Golang >Wie kann ich Dateiänderungen in Go plattformübergreifend erkennen?

Wie kann ich Dateiänderungen in Go plattformübergreifend erkennen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-04 12:00:27741Durchsuche

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

Dateiänderungen in Go erkennen: Eine praktische Lösung

Die Go-Sprache bietet umfangreiche Funktionen für die Dateiverwaltung, aber das Erkennen von Dateiänderungen ist nicht so einfach unkompliziert wie in Unix-Systemen. Um dieses Problem anzugehen, untersuchen wir einen plattformübergreifenden Ansatz, der das OS-Paket nutzt.

Erkennen von Dateiänderungen

Das OS-Paket bietet eine praktische Möglichkeit, Dateiattribute abzurufen. einschließlich seiner Größe und der letzten Änderungszeit. Durch den regelmäßigen Vergleich dieser Attribute können Sie erkennen, wann eine Datei geändert wurde.

Der folgende Codeausschnitt zeigt, wie die Dateiänderungserkennung implementiert wird:

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
}

Verwendung und Überlegungen

Um diese Funktion zu nutzen, übergeben Sie einfach den Pfad zu der Datei, die Sie überwachen möchten. Die Funktion überprüft kontinuierlich die Dateiattribute und benachrichtigt Sie, wenn Änderungen festgestellt werden. Hier ist ein Beispiel für die Verwendung:

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

Dieser Ansatz ist zwar nicht so effizient wie Systemaufrufe wie fcntl(), aber er ist einfach und funktioniert zuverlässig auf allen Plattformen. Dies kann besonders nützlich sein, wenn Sie keinen Zugriff auf untergeordnete Systemfunktionen haben.

Das obige ist der detaillierte Inhalt vonWie kann ich Dateiänderungen in Go plattformübergreifend erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn