使用fsnotify实现文件监听的例子

作者:guoxj
浏览:494

 

// 通过信号机制实现一个文件监听程序,当文件发生变化时,打印出文件名,同时备份当前文件,启动时自动备份一次
package main

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

func main() {
  watch, err := fsnotify.NewWatcher()
  if err != nil {
    log.Fatal(err)
  }
  defer watch.Close()

  // 添加要监控的对象,文件或者文件夹
  err = watch.Add("./testDir")
  if err != nil {
    log.Fatal(err)
  }

  // 使用 goroutine 来处理监控事件
  go func() {
    for {
      select {
      case ev := <-watch.Events:
        {
          // 判断事件发生的类型,大致有:
          // Create 创建
          // Write 写入
          // Remove 删除
          // Rename 重命名
          // Chmod 修改权限
          if ev.Op&fsnotify.Write == fsnotify.Write {
            fmt.Println("modified file:", ev.Name)
          }
          if ev.Op&fsnotify.Create == fsnotify.Create {
            fmt.Println("create file:", ev.Name)
          }
          if ev.Op&fsnotify.Remove == fsnotify.Remove {
            fmt.Println("remove file:", ev.Name)
          }
          if ev.Op&fsnotify.Rename == fsnotify.Rename {
            fmt.Println("rename file:", ev.Name)
          }
          if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
            fmt.Println("chmod file:", ev.Name)
          }
        }
      case err := <-watch.Errors:
        {
          log.Println("error:", err)
          return
        }
      }
    }
  }()

  // 阻塞主 goroutine
  select {}
}

 




登录后回复

共有0条评论