[gogf/gf]关于gfsnotify的问题

2024-06-25 123 views
8

gfsnotify.Add的recursive参数问题 文档说是默认递归监听 代码注释默认是非递归监听

g/os/gfsnotify/gfsnotify_watcher.go#L28 该行的if条件与代码注释不匹配(recursive参数的判断)

回答

6

还有个问题,gfsnotify.Remove方法是不是只能移除同路径的目录监听,不能只移除某个子目录的目录监听? 例如: 目录D:\aaa\bbb\ccc

Add("D:\aaa")之后 只能移除相同目录监听 Remove("D:\aaa") 不能移除子目录监听 Remove("D:\aaa\bbb")

2

@hailaz 感谢反馈,你问了两个问题,第一个问题是代码注释问题,默认为递归目录添加,我已经修正了注释文字说明。第二个问题我看了代码但没有手动测试,应该是可以移除子目录的监听的。gfsnotify这个包封装和设计得非常棒,你可以测试一下,有问题欢迎继续反馈。

3

@johngcn 代码的功能默认是非递归,在子目录新建修改什么的没有触发事件。

func funcName() {
    path, _ := os.Getwd()
    _, err := gfsnotify.Add(path, func(event *gfsnotify.Event) {
        switch {
        case event.IsCreate():
            glog.Println("创建文件 : ", event.Path)
        case event.IsWrite():
            glog.Println("写入文件 : ", event.Path)
        case event.IsRemove():
            glog.Println("删除文件 : ", event.Path)
        case event.IsRename():
            glog.Println("重命名文件 : ", event.Path)
        case event.IsChmod():
            glog.Println("修改权限 : ", event.Path)
        default:
            glog.Println(event)
        }
    })

    if err != nil {
        glog.Fatalfln("%v", err)
    } else {
        select {}
    }
}

另外注意确认一下 g/os/gfsnotify/gfsnotify_watcher.go#L28 这一行代码的if 条件是不是有问题

7

@hailaz 我没有复现你说的问题,我测试的环境是Windows 7,代码如下:

package main

import (
    "github.com/gogf/gf/g/os/gfsnotify"
    "github.com/gogf/gf/g/os/glog"
)

func main() {
    path := `D:\temp`
    _, err := gfsnotify.Add(path, func(event *gfsnotify.Event) {
        glog.Println(event)
    }, true)
    if err != nil {
        glog.Fatal(err)
    } else {
        select {}
    }
}

测试结果截图如下: image

2

@johngcn 你试试把true去掉。说好的默认,你却填了个true [捂脸]。 image

2

@hailaz 感谢,确实有个细节没处理好,没有判断默认值,已修复,将会在下一个修正版本发布。

6

@hailaz 请更新到v1.7.2再试试。