在 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中文网其他相关文章!