我需要知道如何使用Go检测文件何时更改.我知道Unix提供了一个名为的函数fcntl(),它通知特定文件何时被更改,但我没有在Go中找到这个.请帮我.
lau*_*ent 12
这是一个简单的跨平台版本:
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
}
Run Code Online (Sandbox Code Playgroud)
使用方式如下:
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
Run Code Online (Sandbox Code Playgroud)
不如正确的系统调用那么高效,但它很简单并且可以在任何地方使用,并且可能足以满足某些用途.
| 归档时间: |
|
| 查看次数: |
19457 次 |
| 最近记录: |