我正在尝试将目录设置为Go中的hotfolder。一旦文件写入该目录,就应该调用一个函数。
现在我遇到了https://github.com/howeyc/fsnotify这对于这样一个hotfolder似乎是一个很好的构建块。
我的问题是fsnotify在写入过程中会发出大量“文件已更改”的事件,但在完成时则没有,因此我认为不可能以某种方式查看进程是否已完成文件写入。
所以我会想到“在最后'文件更改'事件后等待一秒钟,然后运行我的功能。但我不确定这是否是处理问题的最佳方法,我不确定如何整合这在主事件循环中干净利落(来自给定的github页面):
for {
select {
case ev := <-watcher.Event:
log.Println("event:", ev)
case err := <-watcher.Error:
log.Println("error:", err)
}
}
任何想法/建议?
答案 0 :(得分:6)
以下代码将等待至少一秒没有收到任何事件,然后致电f()
。
for {
timer := time.NewTimer(1*time.Second)
select {
case ev := <-watcher.Event:
log.Println("event:", ev)
case err := <-watcher.Error:
log.Println("error:", err)
case <-timer.C:
f()
}
timer.Stop()
}