YStudio Y++

文件监视支持库

Y++ / YStudio 开发文档 · 一点滴

扁平命令式支持库(不是类)。路径:支持库 → 文件监视支持库 → 文件监视

基于 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 路监视;目录须已存在。
  • 部分编辑器保存会「写临时文件再替换」,可能连续收到多条事件。
  • 程序退出前建议 停止全部监视()