文件监控-添加监控

添加监控

package main

import (
    "context"

    "github.com/gogf/gf/v2/frame/g"
    "github.com/gogf/gf/v2/os/gfsnotify"
)

func main() {
    var (
        path     = "/home/john/temp"
        ctx      = context.Background()
        logger   = g.Log()
        callback = func(event *gfsnotify.Event) {
            if event.IsCreate() {
                logger.Debug(ctx, "创建文件 : ", event.Path)
            }
            if event.IsWrite() {
                logger.Debug(ctx, "写入文件 : ", event.Path)
            }
            if event.IsRemove() {
                logger.Debug(ctx, "删除文件 : ", event.Path)
            }
            if event.IsRename() {
                logger.Debug(ctx, "重命名文件 : ", event.Path)
            }
            if event.IsChmod() {
                logger.Debug(ctx, "修改权限 : ", event.Path)
            }
            logger.Debug(ctx, event)
        }
    )
    _, err := gfsnotify.Add(path, callback, gfsnotify.WatchOption{})
    if err != nil {
        logger.Fatal(ctx, err)
    } else {
        select {}
    }
}

其中 /home/john 参数为一个目录,当我们在 /home/john 目录下创建/删除/修改文件时,可以看到 gfsnotify 监控到了文件的修改并输出了对应的事件信息。

递归监控

我们可以通过gfsnotify.WatchOption来设置监控的一些选项,例如是否递归监控。在默认情况下,Add方法会执行递归监控,也就是说当目录下的文件(包括子目录下的文件)发生变化时,也会收到文件监控信息回调。

如果在监控目录下创建新的目录,并且新的目录中继续创建新的目录或文件,以此类推,新创建的目录或文件也将自动被监控。