等到文件复制完成

我正在使用golang监视程序包来监视文件目录。 https://github.com/radovskyb/watcher


唯一的问题是,创建事件是在文件开始被复制/移动时触发的,而不是在文件实际准备好时触发的。我想知道在创建事件之后Go中是否有一种整洁的等待方式,直到不再写入文件再继续。


我想这种等待很可能必须在goroutine中完成才能不阻止任何其他文件事件。


简单的例子:


package main


import (

        "fmt"

        "log"

        "time"


        "github.com/radovskyb/watcher"

)


func main() {

        w := watcher.New()


        w.FilterOps(watcher.Create, watcher.Write)


        go func() {

                for {

                        select {

                        case event := <-w.Event:

                                fmt.Println(event) // Print the event's info.

                                if event.Op == watcher.Create {

                                    // HERE WE DO STUFF

                                    doStuff(event)

                                }

                        case err := <-w.Error:

                                log.Fatalln(err)

                        case <-w.Closed:

                                return

                        }

                }

        }()


        // Watch this folder for changes.

        if err := w.Add("./files/"); err != nil {

                log.Fatalln(err)

        }



        // Start the watching process - it'll check for changes every 100ms.

        if err := w.Start(time.Millisecond * 100); err != nil {

                log.Fatalln(err)

        }

}

谢谢!


ABOUTYOU
浏览 230回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go