mirror of
https://github.com/GSManagerXZ/GameServerManager.git
synced 2025-11-28 16:40:30 +08:00
4.4 KiB
4.4 KiB
文件监视功能说明
功能概述
文本编辑器现在支持自动监测打开文件的外部修改。当文件在其他地方(如其他编辑器、命令行等)被修改时,系统会自动检测并处理这些变化。
功能特性
1. 自动监视
- 当您在编辑器中打开文件时,系统会自动开始监视该文件
- 不需要手动开启或配置,完全自动化
2. 智能处理
场景一:文件未被修改
- 如果您打开的文件没有任何未保存的修改
- 系统会自动重新加载文件内容
- 编辑器会无缝更新到最新版本
场景二:文件有未保存修改
- 如果您对文件有未保存的修改
- 系统会弹出确认对话框
- 您可以选择:
- 重新加载文件:放弃当前修改,加载磁盘上的最新内容
- 保留我的修改:保留您当前的修改,忽略外部变化
3. 实时监测
- 使用 WebSocket 实现实时文件监视
- 基于文件系统的原生监视机制(
fs.watch) - 低延迟,高效率
技术实现
后端架构
文件监视管理器 (server/src/modules/file/FileWatchManager.ts)
- 管理所有被监视的文件
- 使用 Node.js 的
fs.watchAPI - 跟踪文件修改时间,避免重复通知
- 支持多客户端同时监视同一文件
WebSocket 事件处理 (server/src/index.ts)
watch-file: 开始监视文件unwatch-file: 停止监视文件file-changed: 通知客户端文件已变化
前端架构
文件存储 (client/src/stores/fileStore.ts)
- 管理被监视文件列表
- 处理文件变化事件
- 智能判断是否需要弹出确认对话框
UI 组件 (client/src/components/FileChangedDialog.tsx)
- 美观的确认对话框
- 清晰的警告提示
- 友好的操作按钮
页面集成 (client/src/pages/FileManagerPage.tsx)
- 自动监视/取消监视文件
- 响应文件变化事件
- 显示用户通知
使用流程
-
打开文件
用户双击文件 → 文件在编辑器中打开 → 系统自动开始监视 -
外部修改文件
其他程序修改文件 → 系统检测到变化 → 触发处理逻辑 -
自动处理
检查是否有修改 → 无修改:自动重载 | 有修改:弹出对话框 -
关闭文件
用户关闭文件 → 系统自动停止监视该文件
注意事项
性能考虑
- 监视器使用
{ persistent: false }选项,不会阻止进程退出 - 支持多客户端共享监视,节省资源
- 自动清理断开连接客户端的监视
智能识别保存操作
- 系统能够区分"面板内保存"和"外部修改"
- 当您在面板中保存文件时,不会触发"文件已修改"对话框
- 使用
ignoreNextChange标志机制,在保存操作前设置忽略标志 - 保存完成后自动清除标志,恢复正常监视
安全性
- 只监视已打开的文件
- 路径验证确保安全性
- 客户端断开时自动清理
兼容性
- 支持 Windows、Linux、macOS
- 支持网络文件系统(可能有延迟)
- 支持各种编码格式
故障排除
文件变化未被检测
可能原因:
- 某些编辑器使用"安全保存"模式(先删除再创建新文件)
- 网络文件系统延迟
- 文件被锁定
解决方法:
- 手动刷新编辑器
- 尝试重新打开文件
保存时误报"文件已修改" (已修复)
问题描述:
在面板中保存文件时,总是弹出"文件已在外部修改"对话框
修复方案:
- ✅ 已实现智能识别机制
- ✅ 保存操作会自动设置忽略标志
- ✅ 只有真正的外部修改才会触发对话框
频繁弹出对话框
可能原因:
- 自动保存工具频繁修改文件
- 文件被多个程序同时编辑
解决方法:
- 关闭自动保存工具
- 确保只有一个程序在编辑文件
未来改进
- 支持配置是否启用文件监视
- 支持配置监视延迟时间
- 支持显示文件变化差异对比
- 支持合并外部修改和本地修改
相关文件
后端
server/src/modules/file/FileWatchManager.ts- 文件监视管理器server/src/index.ts- WebSocket 事件处理
前端
client/src/stores/fileStore.ts- 文件状态管理client/src/components/FileChangedDialog.tsx- 确认对话框组件client/src/pages/FileManagerPage.tsx- 文件管理页面集成client/src/utils/socket.ts- WebSocket 客户端