YStudio Y++

文件监视支持库

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

路径:支持库 → 文件监视支持库 → 文件监视。

硬约束

  1. 扁平命令;基于 Windows ReadDirectoryChangesW:后台收变更,回调在 UI 消息线程(可安全改界面)。
  2. 最多同时 32 路;目录须已存在;失败 ID=0。
  3. 注册回调写 &函数名(与定时器/热键同风格)。
  4. 退出前建议 停止全部监视()。
  5. 部分编辑器「写临时再替换」可能连续多条事件。

快速开始

整数 监视ID

函数 目录有变化 (文本 全路径, 整数 类型, 整数 监视ID) {
    输出(全路径 + " 类型=" + 到文本(类型) + " id=" + 到文本(监视ID))
}

函数 主窗口.创建完毕 () {
    监视ID = 监视目录(取运行目录(), &目录有变化, 真)
    如果 (监视ID == 0) {
        警告框("监视失败:" + 取监视错误())
    }
}

文件监视

本分类共 14 条。

监视目录

  • 签名:整数 监视目录(文本 路径, 子程序指针 回调, [逻辑 含子目录=假], [整数 过滤标志=0], [文本 通配符=""])
  • 说明:监视目录下文件/子项变更。成功返回监视 ID(>0),失败返回 0。 回调可为无参或带参(文本路径/整数类型/整数ID);带参时由生成器自动填入。
  • 参数一│文本 路径: 要监视的目录(须已存在)
  • 参数二│子程序指针 回调: &函数名。可无参(体内取监视*),或 函数 名(文本 全路径, 整数 类型, 整数 监视ID)
  • 参数三│[逻辑 含子目录=假]: 真=递归监视子目录
  • 参数四│[整数 过滤标志=0]: 0全部;1文件名 2目录名 4属性 8大小 16写入,可相加
  • 参数五│[文本 通配符=”“]: 如 “*.txt”;空=不限(仅匹配文件名)

监视文件

  • 签名:整数 监视文件(文本 路径, 子程序指针 回调, [整数 过滤标志=0])
  • 说明:监视单个文件(监视其父目录并按文件名过滤)。成功返回监视 ID,失败返回 0。
  • 参数一│文本 路径: 文件完整路径(父目录须存在)
  • 参数二│子程序指针 回调: &函数名,用法同 监视目录
  • 参数三│[整数 过滤标志=0]: 同 监视目录

停止监视

  • 签名:逻辑 停止监视(整数 监视ID)
  • 说明:停止指定监视。成功返回真。
  • 参数一│整数 监视ID: 监视目录/监视文件 的返回值

停止全部监视

  • 签名:无 停止全部监视()
  • 说明:停止本程序全部文件/目录监视。窗口关闭前建议调用。

监视是否有效

  • 签名:逻辑 监视是否有效(整数 监视ID)
  • 说明:判断监视 ID 是否仍在监视中。
  • 参数一│整数 监视ID

暂停监视

  • 签名:逻辑 暂停监视(整数 监视ID)
  • 说明:暂停回调投递(底层仍挂接,但不触发回调)。成功返回真。
  • 参数一│整数 监视ID

恢复监视

  • 签名:逻辑 恢复监视(整数 监视ID)
  • 说明:恢复此前暂停的监视。成功返回真。
  • 参数一│整数 监视ID

取监视根路径

  • 签名:文本 取监视根路径(整数 监视ID)
  • 说明:取该路监视的目录路径(监视文件时为父目录)。
  • 参数一│整数 监视ID

取监视变更路径

  • 签名:文本 取监视变更路径()
  • 说明:【回调内】相对监视目录的变更路径。无参回调时使用;带参时可直接用形参。

取监视变更全路径

  • 签名:文本 取监视变更全路径()
  • 说明:【回调内】变更项的完整路径。

取监视变更旧路径

  • 签名:文本 取监视变更旧路径()
  • 说明:【回调内】改名时的旧相对路径(类型=5 改名新时可用;类型=4 时等于当前路径)。

取监视变更旧全路径

  • 签名:文本 取监视变更旧全路径()
  • 说明:【回调内】改名时的旧完整路径。

取监视变更类型

  • 签名:整数 取监视变更类型()
  • 说明:【回调内】1=添加 2=删除 3=修改 4=改名(旧名) 5=改名(新名)。

取监视ID

  • 签名:整数 取监视ID()
  • 说明:【回调内】触发本次回调的监视 ID(多路监视时区分来源)。

回调怎么用

方式 A:带形参(推荐)

函数 目录有变化 (文本 全路径, 整数 类型, 整数 监视ID) {
    输出(全路径 + " 类型=" + 到文本(类型))
}
监视目录(dir, &目录有变化)

形参名约定:

形参 填入
文本(默认) 全路径
名含「相对」 相对路径
名含「旧」 改名旧路径
第一个整数 变更类型
名含 ID / 监视 监视 ID

也支持 (文本)、(文本, 整数)、(文本, 整数, 整数)。

方式 B:无参 + 取监视*

函数 目录有变化 () {
    输出(取监视变更全路径() + " 类型=" + 到文本(取监视变更类型()))
}

过滤标志(可相加)

值 含义
0 全部(默认)
1 文件名
2 目录名
4 属性
8 大小
16 最后写入

例:1+16=17 → 文件名变更 + 写入。

变更类型

值 含义
1 添加
2 删除
3 修改
4 改名(旧名事件)
5 改名(新名事件)

易错对照

错误 正确
回调写函数名无 & &目录有变化
监视尚未创建的目录 先 创建目录
关闭窗口不停止监视 停止全部监视()

相关

热键支持库 · 回调 · 目录操作