代码拉取完成,页面将自动刷新
package xfile
import (
"gitee.com/xlm516/xtool/dbg"
"github.com/fsnotify/fsnotify"
"log"
)
type ChangedIf struct {
IfCreate func(rootDir, name string)
IfModify func(rootDir, name string)
IfDelete func(rootDir, name string)
IfRename func(rootDir, name string)
}
type FileMonitor struct {
watch *fsnotify.Watcher
watchPath map[string]string
If ChangedIf
bExit bool
}
func NewMonitor(path string) (*FileMonitor, error) {
w, err := fsnotify.NewWatcher()
if err != nil {
return nil, err
}
fm := &FileMonitor{}
fm.watch = w
fm.watchPath = make(map[string]string)
if path != "" {
fm.watchPath[path] = "1"
fm.watch.Add(path)
}
return fm, nil
}
func (me *FileMonitor) Start() error {
me.do()
return nil
}
func (me *FileMonitor) AddWatch(path string) error {
if me.watch == nil {
return nil
}
_, ok := me.watchPath[path]
if ok {
return nil
}
err := me.watch.Add(path)
if err != nil {
dbg.Dbg("Add Watch: %s, path:%s\n", err.Error(), path)
} else {
me.watchPath[path] = "1"
}
return err
}
func (me *FileMonitor) DelWatch(path string) {
if me.watch == nil {
return
}
delete(me.watchPath, path)
me.watch.Remove(path)
}
func (me *FileMonitor) ResetWatch() {
if me.watch == nil {
return
}
for k, v := range me.watchPath {
me.watch.Remove(v)
delete(me.watchPath, k)
}
}
func (me *FileMonitor) Close() {
me.bExit = true
if me.watch == nil {
return
}
me.watch.Close()
}
func (me *FileMonitor) onCreate(name string) {
//fmt.Println("onCreate: ", name)
if me.If.IfCreate != nil {
me.If.IfCreate("", name)
}
}
func (me *FileMonitor) onModify(name string) {
//fmt.Println("onModify: ", name)
if me.If.IfModify != nil {
me.If.IfModify("", name)
}
}
func (me *FileMonitor) onDelete(name string) {
//fmt.Println("onDelete: ", name)
if me.If.IfDelete != nil {
me.If.IfDelete("", name)
}
}
func (me *FileMonitor) onRename(name string) {
//fmt.Println("onRename: ", name)
if me.If.IfRename != nil {
me.If.IfRename("", name)
}
}
func (me *FileMonitor) onAttrib(name string) {
//fmt.Println("onAttrib: ", name)
}
func (me *FileMonitor) do() {
go func() {
for {
if me.bExit {
return
}
select {
case event := <-me.watch.Events:
//log.Println("event:", event)
if event.Op&fsnotify.Create == fsnotify.Create {
me.onCreate(event.Name)
}
if event.Op&fsnotify.Write == fsnotify.Write {
me.onModify(event.Name)
}
if event.Op&fsnotify.Remove == fsnotify.Remove {
me.onDelete(event.Name)
}
if event.Op&fsnotify.Rename == fsnotify.Rename {
me.onRename(event.Name)
}
if event.Op&fsnotify.Chmod == fsnotify.Chmod {
me.onAttrib(event.Name)
}
case err := <-me.watch.Errors:
log.Println("error:", err)
}
}
}()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。