- 基本步骤:
- 使用
time.Ticker
来设置一个时间间隔,用于定期检查文件的修改时间。
- 使用
os.Stat
函数获取文件的状态信息,其中包含文件的修改时间。
- 保存上一次获取的文件修改时间,与当前获取的时间进行比较,如果不同则说明文件发生了变化,执行相应操作。
- 核心代码示例:
package main
import (
"fmt"
"os"
"time"
)
func main() {
filePath := "test.txt"
var lastModTime time.Time
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
fileInfo, err := os.Stat(filePath)
if err != nil {
fmt.Printf("Error stating file: %v\n", err)
continue
}
if lastModTime.IsZero() {
lastModTime = fileInfo.ModTime()
} else if fileInfo.ModTime() != lastModTime {
fmt.Println("File has been modified. Performing action...")
// 在这里执行相应操作
lastModTime = fileInfo.ModTime()
}
}
}
}
- 代码解释:
- 定义
filePath
为要监控的文件路径。
lastModTime
用于保存上一次文件的修改时间,初始化为零值。
ticker
设置为每1秒触发一次。
- 在
for
循环中,通过select
语句监听ticker.C
通道,当时间间隔到达时,执行检查文件修改时间的逻辑。
- 使用
os.Stat
获取文件信息,如果获取失败则打印错误并继续循环。
- 如果
lastModTime
是零值,说明是第一次获取,将当前文件修改时间赋值给它。
- 如果当前文件修改时间与
lastModTime
不同,说明文件发生了变化,打印提示并执行相应操作,然后更新lastModTime
。