文件监听(FileWatch)实现原理


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

效果


文章作者: HeliantHuS
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 HeliantHuS !
评论
 上一篇
BUUOJ CTF Misc题目WriteUP BUUOJ CTF Misc题目WriteUP
BUUOJ CTF, 日常刷题记录, 包含题目flag, 以及使用的脚本. 这是关于杂项题目的WP, 之前写过密码学的WP, 如果有需要可以转到BUUCTF 密码学思路 签到emm, 直接给flag了。flag{buu_ctf} 金三
2020-06-02
下一篇 
Dogo目录监听自动构建工具 Dogo目录监听自动构建工具
dogo是一个使用Go语言编写的自动化构建工具, 可以实时监听目录, 发生更改时就自动执行特定命令。 Github: https://github.com/liudng/dogo 下载并编译git clone https://githu
2020-05-30
  目录