howeyc/fsnotify

howeyc/fsnotify watch in window and linux problem, it‘s have some err

woqunokia opened this issue · 8 comments

OS:window7
folder
create:
"D:\test\新建文件夹": CREATE
rename
2015/11/24 15:02:39 event: "D:\test\新建文件夹": RENAME
2015/11/24 15:02:39 event: "D:\test\test": RENAME

delete
2015/11/24 15:03:12 event: "D:\test\test": DELETE
MODIFY
2015/11/24 15:04:37 event: "D:\test\ww": MODIFY

file
create
2015/11/24 15:05:33 event: "D:\test\新建文本文档.txt": CREATE
rename
2015/11/24 15:05:52 event: "D:\test\新建文本文档.txt": RENAME
2015/11/24 15:05:52 event: "D:\test\test.txt": RENAME
2015/11/24 15:05:52 event: "D:\test\test.txt": MODIFY
why print MODIFY?
MODIFY
2015/11/24 15:06:14 event: "D:\test\test.txt": MODIFY
2015/11/24 15:06:14 event: "D:\test\test.txt": MODIFY
2015/11/24 15:06:14 event: "D:\test\test.txt": MODIFY
why this line run 3times?
delete
2015/11/24 15:08:15 event: "D:\test\test.txt": DELETE

OS:centos
folder
create:
2015/11/24 15:11:52 event: "/root/桌面/test/untitled folder": CREATE
rename
2015/11/24 15:12:23 event: "/root/桌面/test/untitled folder": RENAME
2015/11/24 15:12:23 event: "/root/桌面/test/test": CREATE
delete
2015/11/24 15:17:18 event: "/root/桌面/test/test": RENAME
MODIFY
nothing

file
create
2015/11/24 15:20:10 event: "/root/桌面/test/new file": CREATE
rename
2015/11/24 15:20:31 event: "/root/桌面/test/new file": RENAME
2015/11/24 15:20:31 event: "/root/桌面/test/test": CREATE
MODIFY
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": CREATE
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": MODIFY|ATTRIB
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": MODIFY|ATTRIB
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": MODIFY|ATTRIB
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": MODIFY
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": MODIFY
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": MODIFY
2015/11/24 15:20:58 event: "/root/桌面/test/test": RENAME //rename
2015/11/24 15:20:58 event: "/root/桌面/test/.gedit-save-D5SP8X": RENAME
2015/11/24 15:20:58 event: "/root/桌面/test/test": CREATE
2015/11/24 15:20:58 event: "/root/桌面/test/test~": DELETE
About file test only 2 lines but it's rename and create
delete
2015/11/24 15:29:53 event: "/root/桌面/test/test": RENAME

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

done := make(chan bool)

// Process events
go func() {
    for {
        select {
        case ev := <-watcher.Event:
            log.Println("event:", ev)
            if ev.IsModify() {
                log.Println("xxxxxxxxxxxx")
            }
        case err := <-watcher.Error:
            log.Println("error:", err)
        }
    }
}()

err = watcher.Watch("/root/桌面/test")
//err = watcher.Watch("/hard/psq")
if err != nil {
    log.Fatal(err)
}

// Hang so program doesn't exit
<-done

//select{}

/* ... do stuff ... */
watcher.Close()

}

if i watch a file ,
package main

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

func test(){
log.Println("test")
}

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

done := make(chan bool)

// Process events
go func() {
    for {
        select {
        case ev := <-watcher.Event:
            //log.Println("event:", ev)
            if ev.IsModify() {
                log.Println("xxxxxxxxxxxx")
            }
            //test()
        case err := <-watcher.Error:
            log.Println("error:", err)
        }
    }
}()

err = watcher.Watch("/root/桌面/test/test.txt")
//err = watcher.Watch("/hard/psq")
if err != nil {
    log.Fatal(err)
}

// Hang so program doesn't exit
<-done

//select{}

/* ... do stuff ... */
watcher.Close()

}
when i MODIFY the file test.txt it's only print in the first time . in windows it's print 3times

I use the example support by yours.

You can try using https://github.com/go-fsnotify/fsnotify which has some bugfixes that haven't been incorporated into howeyc/fsnotify.

Though it may not fix things like multiple modify events, particularly if you are triggering these changes with a text editor. Editors are notorious for causing issues like that https://github.com/go-fsnotify/fsnotify/issues/17.

Thank you,
I tried. but when modify by "echo "bb" >> test.txt" (it's append in the end of file ) like this, it's print once, but if i use "bb" >> test.txt" ,it's print 2 times.(in window and linux are same).
if open the file with edition , it's print 3 or 2 times.

I use an edition maybe print more. could you explain the different between "echo "bb" > test.txt" and
"echo "bb" >> test.txt" .
thanks.

I konw "echo "bb" >> test.txt" , clean the file then write,but after clean it don't save the file.

If you're just using echo it shouldn't have the problems I mentioned about editors. Hm. I'm not sure. 😦

Having the same problem that it returns 2 events instead of one (using with echo)

@pkutishch Would you mind trying against the latest version by running the following in terminal/console:

go get -u github.com/fsnotify/fsnotify

and changing import paths to:

import "github.com/fsnotify/fsnotify"

If echo is still a problem, please open a new issue there.
https://github.com/fsnotify/fsnotify/issues/new

Thanks!