在Go 中偵測檔案變更
問題:
如何偵測🎜>問題:
如何偵測🎜>如何偵測檔案何時發生變化使用Go 程式語言進行更改?有沒有辦法模擬 Linux 的 fcntl() 功能,可以在特定檔案發生變更時發出通知?
答案:
而 fcntl() 函數則沒有Go中可用,還有其他技術可以用來實現文件更改
跨平台方法:
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 }
此方法涉及定期輪詢文件是否有更改:
此函數重複檢查檔案的大小和修改時間,並在變更時傳回
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
此範例示範如何使用watchFile 函數偵測檔案變更並透過通道通知主例程。
注意:
這種跨平台方法並不像與本機系統呼叫一樣高效,但提供了一種簡單且可移植的方式來追蹤文件更改。對於某些用例來說可能就足夠了。以上是如何在 Go 中檢測文件更改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!