Dateiänderungen in Go erkennen
Frage:
Wie kann ich erkennen, wenn eine Datei Änderungen mit der Programmiersprache Go? Gibt es eine Möglichkeit, die fcntl()-Funktionalität von Linux zu emulieren, die benachrichtigen kann, wenn eine bestimmte Datei Änderungen erfährt?
Antwort:
Die fcntl()-Funktion hingegen nicht Obwohl in Go verfügbar, gibt es noch andere Techniken, mit denen Sie Dateiänderungen erkennen können.
Plattformübergreifend Methode:
Bei dieser Methode wird die Datei in regelmäßigen Abständen auf Änderungen abgefragt:
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 }
Diese Funktion überprüft wiederholt die Größe und den Änderungszeitpunkt der Datei und kehrt zurück, wenn eine Änderung erkannt wird .
Verwendungsbeispiel:
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
Dieses Beispiel zeigt, wie es geht Verwenden Sie die watchFile-Funktion, um Dateiänderungen zu erkennen und die Hauptroutine über einen Kanal zu benachrichtigen.
Hinweis:
Diese plattformübergreifende Methode ist nicht so effizient wie ein natives System Aufruf, bietet aber eine einfache und portable Möglichkeit, Dateiänderungen zu verfolgen. Für bestimmte Anwendungsfälle kann es ausreichend sein.
Das obige ist der detaillierte Inhalt vonWie kann ich Dateiänderungen in Go erkennen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!