Go中的Hotfolder /等待文件写入

时间:2012-11-17 20:36:32

标签: go

我正在尝试将目录设置为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)
    }
}

任何想法/建议?

1 个答案:

答案 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()
}