拿上一篇文章中提到的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
}
}