在Go 中偵測檔案變更:實用的解決方案
Go 語言提供了廣泛的檔案處理功能,但偵測檔案變更並不像就像在Unix 系統中一樣簡單。為了解決這個問題,讓我們來探索一種利用 os 套件的跨平台方法。
偵測檔案變更
os 套件提供了一種取得檔案屬性的便捷方法,包括其大小和最後修改時間。透過定期比較這些屬性,您可以識別檔案何時被變更。
以下程式碼片段示範如何實現檔案變更偵測:
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
雖然這種方法不如 fcntl() 等系統呼叫高效,但它很簡單並且跨平台可靠地工作。當您無法存取低階系統功能時,它會特別有用。
以上是Go如何跨平台偵測文件變化?的詳細內容。更多資訊請關注PHP中文網其他相關文章!