diff --git a/g/os/gfpool/gfpool.go b/g/os/gfpool/gfpool.go index 9943b6e51..9e9b73c9f 100644 --- a/g/os/gfpool/gfpool.go +++ b/g/os/gfpool/gfpool.go @@ -101,22 +101,24 @@ func (p *Pool) File() (*File, error) { if v, err := p.pool.Get(); err != nil { return nil, err } else { - f := v.(*File) + f := v.(*File) + stat, err := os.Stat(f.path) if f.flag & os.O_CREATE > 0 { - if _, err := os.Stat(f.path); os.IsNotExist(err) { + if os.IsNotExist(err) { if file, err := os.OpenFile(f.path, f.flag, f.perm); err != nil { return nil, err } else { f.File = *file + if stat, err = f.Stat(); err != nil { + return nil, err + } } } } if f.flag & os.O_TRUNC > 0 { - if stat, err := f.Stat(); err == nil { - if stat.Size() > 0 { - if err := f.Truncate(0); err != nil { - return nil, err - } + if stat.Size() > 0 { + if err := f.Truncate(0); err != nil { + return nil, err } } } @@ -127,7 +129,6 @@ func (p *Pool) File() (*File, error) { } else { f.Seek(0, 0) } - if !p.inited.Set(true) { gfsnotify.Add(f.path, func(event *gfsnotify.Event) { // 如果文件被删除或者重命名,立即重建指针池 diff --git a/g/os/gfsnotify/gfsnotify.go b/g/os/gfsnotify/gfsnotify.go index bb8bdac90..ee40fd421 100644 --- a/g/os/gfsnotify/gfsnotify.go +++ b/g/os/gfsnotify/gfsnotify.go @@ -64,7 +64,7 @@ const ( const ( REPEAT_EVENT_FILTER_INTERVAL = 1 // (毫秒)重复事件过滤间隔 - DEFAULT_WATCHER_COUNT = 2 // 默认创建的监控对象数量(使用哈希取模) + DEFAULT_WATCHER_COUNT = 4 // 默认创建的监控对象数量(使用哈希取模) ) var ( diff --git a/g/os/gfsnotify/gfsnotify_watcher.go b/g/os/gfsnotify/gfsnotify_watcher.go index 5d5ce4b13..ee6a32fcc 100644 --- a/g/os/gfsnotify/gfsnotify_watcher.go +++ b/g/os/gfsnotify/gfsnotify_watcher.go @@ -207,6 +207,7 @@ func (w *Watcher) startEventLoop() { for { if v := w.events.Pop(); v != nil { event := v.(*Event) + // 如果是删除操作,那么需要判断是否文件真正不存在了 if event.IsRemove() { if fileExists(event.Path) { // 如果是文件删除事件,判断该文件是否存在,如果存在,那么将此事件认为“假删除”, diff --git a/geg/other/test.go b/geg/other/test.go index 3753125c9..9a28077b6 100644 --- a/geg/other/test.go +++ b/geg/other/test.go @@ -2,9 +2,15 @@ package main import ( "fmt" - "gitee.com/johng/gf/g/os/gtime" + "os" + "time" ) func main() { - fmt.Println(gtime.Now().Format("Y年m月d日 H时i分s秒")) + for { + stat, err := os.Stat("/home/john/temp/log") + fmt.Println(err) + fmt.Println(stat.Size()) + time.Sleep(time.Second) + } } \ No newline at end of file