猿问

Go中的Hotfolder /等待文件被写入

我正在尝试将目录设置为Go中的热文件夹。一旦文件完成写入该目录,就应调用一个函数。


现在,我遇到了https://github.com/howeyc/fsnotify,对于这样的文件夹来说,这似乎是一个很好的构建块。


我的问题是fsnotify在写入过程中会发出许多“文件已更改”事件,但在完成时不会发出任何事件,因此,我认为不可能用这种方式来查看进程是否已完成文件写入。


因此,我会想到“在最后一次“文件更改”事件后等待一秒钟,然后运行我的函数。但是我不确定这是否是解决问题的最佳方法,而且我不确定如何将其干净地集成到系统中。主事件循环(来自给定的github页面):


for {

    select {

    case ev := <-watcher.Event:

        log.Println("event:", ev)

    case err := <-watcher.Error:

        log.Println("error:", err)

    }

}

有任何想法/建议吗?


月关宝盒
浏览 250回答 1
1回答

湖上湖

以下代码将等待,直到至少一秒钟未收到任何事件,然后调用f()。for {&nbsp; &nbsp; timer := time.NewTimer(1*time.Second)&nbsp; &nbsp; select {&nbsp; &nbsp; case ev := <-watcher.Event:&nbsp; &nbsp; &nbsp; &nbsp; log.Println("event:", ev)&nbsp; &nbsp; case err := <-watcher.Error:&nbsp; &nbsp; &nbsp; &nbsp; log.Println("error:", err)&nbsp; &nbsp; case <-timer.C:&nbsp; &nbsp; &nbsp; &nbsp; f()&nbsp; &nbsp; }&nbsp; &nbsp; timer.Stop()}
随时随地看视频慕课网APP

相关分类

Go
我要回答