拿上一篇文章中提到的dogo为例, 它是怎么进行文件监听的呢, 如何实现一个简单的文件监听 这篇文章就带你从底层看最简单的实现原理.

代码文件结构

├─fileWatch
│  ├─.idea
│  └─folder
│  main.go

原理

把要监听的文件目录取 最后一次的更改时间当前大小, 这两个值的类型都是int64, 然后进行异或, 这样无论是哪个值发生了更改, 最后的异或结果都会进行变化, 就可以看出这个目录是否被操作了.

代码实现

main.go

package main

import (
    "fmt"
    "os"
    "time"
)

var (
    FolderName = "C:\\Users\\Administrator\\Desktop\\fileWatch\\folder"
    LastValue int64
)

func main()  {
    for {
        info, err := os.Stat(FolderName)
        if err != nil {
            panic("文件夹可能不存在.")
        }

        nowValue := info.ModTime().Unix() ^ info.Size()
        if nowValue != LastValue {
            fmt.Println("文件夹发生更改")
            LastValue = nowValue
        }
        time.Sleep(1 * time.Second)  // 如果不Sleep, 会特别占用CPU
    }
}

效果