Go中的Hotfolder /等待文件写入

top*_*kip 4 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么想法/建议吗?

Ste*_*erg 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()
}
Run Code Online (Sandbox Code Playgroud)