5

Goでホットフォルダとしてディレクトリを設定しようとしています。そのディレクトリへのファイルの書き込みが完了するとすぐに、関数が呼び出されます。

今、私はhttps://github.com/howeyc/fsnotifyに出くわしました。これは、このようなホットフォルダーの優れた構成要素のようです。

私の問題は、fsnotifyが書き込み中に多くの「ファイル変更」イベントを発行するが、終了時には発生しないことです。そのため、プロセスがファイルの書き込みを終了したかどうかを確認する方法は不可能だと思います。

したがって、「最後の「ファイルが変更された」イベントから1秒待ってから関数を実行する」と考えます。しかし、これが問題に対処する最善の方法であるかどうかはわかりません。また、これをどのようにきれいに統合するかはよくわかりません。メインイベントループ(指定されたgithubページから):

for {
    select {
    case ev := <-watcher.Event:
        log.Println("event:", ev)
    case err := <-watcher.Error:
        log.Println("error:", err)
    }
}

何かアイデア/アドバイスはありますか?

4

1 に答える 1

6

次のコードは、イベントが受信されなくなるまで少なくとも1秒間待機してから、を呼び出します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()
}
于 2012-11-17T20:55:06.230 に答える