golang 实现文件监控
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/fsnotify/fsnotify"
)
func main() {
// 初始化监控器
w, err := fsnotify.NewWatcher()
if err != nil {
fmt.Println(err)
return
}
defer w.Close()
// 遍历当前文件夹下的目录,将所有的目录添加但监听列表
filepath.Walk("./", func(path string, info os.FileInfo, err error) error {
if info.IsDir() {
path, err := filepath.Abs(info.Name())
if err != nil {
return err
}
w.Add(path)
}
return nil
})
for {
select {
case ev := <-w.Events:
{
if ev.Op&fsnotify.Create == fsnotify.Create {
// 当为文件创建时
fmt.Println(ev.Name, "created!!!")
// 判断是否是文件夹
info, err := os.Stat(ev.Name)
if err != nil {
fmt.Println(err)
}
// 如果是文件夹,添加到侦听列表
if info.IsDir() {
w.Add(ev.Name)
}
}
if ev.Op&fsnotify.Write == fsnotify.Write {
// 文件修改
fmt.Println(ev.Name, "changed!!!") //
}
if ev.Op&fsnotify.Remove == fsnotify.Remove {
// 文件删除
fmt.Println(ev.Name, "removed!!!")
}
if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
// 修改权限
fmt.Println(ev.Name, "chmod!!!")
}
}
case err := <-w.Errors:
{
fmt.Println(err)
return
}
}
}
}