$ go get github.com/fsnotify/fsnotify
type Event struct {
Name string //文件或目录的相对路径
Op Op //文件更改事件 }
func (e Event) String() string
type Op uint32const (
Create Op = 1 << iota
Write
Remove
Rename
Chmod
)
type Watcher struct {
Events chan Event
Errors chan error
...} func (w *Watcher) Add(name string) error func (w *Watcher) Remove(name string) error func (w *Watcher) Close() error
func NewWatcher() (*Watcher, error)
import (
"log"
"github.com/fsnotify/fsnotify"
)
func main() {
watcher, err := fsnotify.NewWatcher()
if err != nil {
log.Fatal("new watcher failed: ", err)
}
defer watcher.Close()
done := make(chan bool)
go func() {
defer close(done)
for {
select {
case event, ok := <-watcher.Events:
if !ok {
return
}
log.Printf("%s %s\n", event.Name, event.Op)
case err, ok := <-watcher.Errors:
if !ok {
return
}
log.Println("error: ", err)
}
}
}()
err = watcher.Add("./")
if err != nil {
log.Fatal("add failed:", err)
}
<-done
}
2022/06/09 07:01:15 main.go~ CREATE
2022/06/09 07:01:15 main.go WRITE|CHMOD
2022/06/09 07:01:15 main.go~ CREATE
2022/06/09 07:01:15 main.go CHMOD
2022/06/09 07:01:15 main.go WRITE
2022/06/09 07:01:15 main.go~ REMOVE
2022/06/09 07:01:16 main.go CHMOD