扁平命令式支持库(不是类)。路径:支持库 → 文件监视支持库 → 文件监视。
基于 Windows ReadDirectoryChangesW:后台线程收集变更,回调在 UI 消息线程执行(可安全改标签/列表)。
回调怎么用(必读)
注册时写 &函数名。回调有两种写法:
方式 A:带形参(推荐)
函数 目录有变化 (文本 全路径, 整数 类型, 整数 监视ID) {
输出(全路径 + " 类型=" + 到文本(类型))
}
监视目录(dir, &目录有变化)
代码生成会自动把 取监视* 的值填进形参。形参名约定:
| 形参 | 填入 |
|---|---|
| 文本(默认) | 全路径 |
| 名含「相对」 | 相对路径 |
| 名含「旧」 | 改名旧路径 |
| 第一个整数 | 变更类型 |
| 名含 ID / 监视 | 监视 ID |
也支持 (文本), (文本, 整数), (文本, 整数, 整数)。
方式 B:无参 + 取监视*
函数 目录有变化 () {
输出(取监视变更全路径() + " 类型=" + 到文本(取监视变更类型()))
}
与 定时器类.启动(&滴答)、注册热键(..., &回调) 相同风格。
快速开始
整数 监视ID
函数 目录有变化 (文本 全路径, 整数 类型, 整数 监视ID) {
输出(全路径 + " 类型=" + 到文本(类型) + " id=" + 到文本(监视ID))
}
函数 主窗口.创建完毕 () {
文本 dir = 取临时目录() + "watch_demo"
创建目录(dir)
// 含子目录=假,过滤=文件名+写入(1+16),仅 *.txt
监视ID = 监视目录(dir, &目录有变化, 假, 17, "*.txt")
}
函数 主窗口.即将关闭 () {
停止全部监视()
}
监视单个文件:
整数 id = 监视文件(取临时目录() + "a.txt", &文件有变化)
命令一览
| 命令 | 返回 | 说明 |
|---|---|---|
监视目录(路径, &回调, [含子目录], [过滤标志], [通配符]) |
整数 ID | 失败为 0 |
监视文件(路径, &回调, [过滤标志]) |
整数 ID | 监视父目录并按文件名过滤 |
停止监视(ID) |
逻辑 | 停一路 |
停止全部监视() |
无 | 停全部 |
监视是否有效(ID) |
逻辑 | 是否仍在监视 |
暂停监视(ID) / 恢复监视(ID) |
逻辑 | 暂停/恢复回调投递 |
取监视根路径(ID) |
文本 | 该路监视的目录 |
取监视变更路径() |
文本 | 回调内相对路径 |
取监视变更全路径() |
文本 | 回调内完整路径 |
取监视变更旧路径() / 取监视变更旧全路径() |
文本 | 改名时的旧名 |
取监视变更类型() |
整数 | 1添/2删/3改/4旧名/5新名 |
取监视ID() |
整数 | 哪一路触发 |
过滤标志
| 值 | 含义 |
|---|---|
| 0 | 全部(默认) |
| 1 | 文件名 |
| 2 | 目录名 |
| 4 | 属性 |
| 8 | 大小 |
| 16 | 最后写入 |
可相加,例如 1+16=17 表示文件名变更 + 写入。
注意
- 最多同时 32 路监视;目录须已存在。
- 部分编辑器保存会「写临时文件再替换」,可能连续收到多条事件。
- 程序退出前建议
停止全部监视()。