Go 文件/文件夹 监控 fsnotify

知识点:

github.com/fsnotify/fsnotify

建议: 在使用 fsnotify 进行监控的 时候 监控文件夹 可以及时 将文件夹内的改变都进行监听
  
   但是, 在监听文件的时候 只能监听 文件的 第一次更改

demo:

package main;

import (
    "github.com/fsnotify/fsnotify"
    "log"
)

func main() {
    //创建一个监控对象
    watch,err := fsnotify.NewWatcher();
    if err != nil {
        log.Fatal(err);
    }
    defer watch.Close();
    //添加要监控的对象,文件或文件夹
    err = watch.Add("/Users/zhaoxianxin/test");
    if err != nil {
        log.Fatal(err);
    }
    //我们另启一个goroutine来处理监控对象的事件
    go func() {
        for {
            select {
            case ev := <-watch.Events:
                {
                    //判断事件发生的类型,如下5种
                    // Create 创建
                    // Write 写入
                    // Remove 删除
                    // Rename 重命名
                    // Chmod 修改权限
                    if ev.Op&fsnotify.Create == fsnotify.Create {
                        log.Println("创建文件 : ",ev.Name);
                    }
                    if ev.Op&fsnotify.Write == fsnotify.Write {
                        log.Println("写入文件 : ",ev.Name);
                    }
                    if ev.Op&fsnotify.Remove == fsnotify.Remove {
                        log.Println("删除文件 : ",ev.Name);
                    }
                    if ev.Op&fsnotify.Rename == fsnotify.Rename {
                        log.Println("重命名文件 : ",ev.Name);
                    }
                    if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
                        log.Println("修改权限 : ",ev.Name);
                    }
                }
            case err := <-watch.Errors:
                {
                    log.Println("error : ",err);
                    return;
                }
            }
        }
    }();

    //循环
    select {};
}

 

posted @ 2021-03-05 16:13  Black_Climber  阅读(519)  评论(0编辑  收藏  举报