mirror of
https://github.com/GSManagerXZ/GameServerManager.git
synced 2025-11-29 09:00:30 +08:00
166 lines
4.4 KiB
Markdown
166 lines
4.4 KiB
Markdown
# 文件监视功能说明
|
||
|
||
## 功能概述
|
||
|
||
文本编辑器现在支持自动监测打开文件的外部修改。当文件在其他地方(如其他编辑器、命令行等)被修改时,系统会自动检测并处理这些变化。
|
||
|
||
## 功能特性
|
||
|
||
### 1. 自动监视
|
||
|
||
- 当您在编辑器中打开文件时,系统会自动开始监视该文件
|
||
- 不需要手动开启或配置,完全自动化
|
||
|
||
### 2. 智能处理
|
||
|
||
**场景一:文件未被修改**
|
||
- 如果您打开的文件没有任何未保存的修改
|
||
- 系统会自动重新加载文件内容
|
||
- 编辑器会无缝更新到最新版本
|
||
|
||
**场景二:文件有未保存修改**
|
||
- 如果您对文件有未保存的修改
|
||
- 系统会弹出确认对话框
|
||
- 您可以选择:
|
||
- **重新加载文件**:放弃当前修改,加载磁盘上的最新内容
|
||
- **保留我的修改**:保留您当前的修改,忽略外部变化
|
||
|
||
### 3. 实时监测
|
||
|
||
- 使用 WebSocket 实现实时文件监视
|
||
- 基于文件系统的原生监视机制(`fs.watch`)
|
||
- 低延迟,高效率
|
||
|
||
## 技术实现
|
||
|
||
### 后端架构
|
||
|
||
**文件监视管理器** (`server/src/modules/file/FileWatchManager.ts`)
|
||
- 管理所有被监视的文件
|
||
- 使用 Node.js 的 `fs.watch` API
|
||
- 跟踪文件修改时间,避免重复通知
|
||
- 支持多客户端同时监视同一文件
|
||
|
||
**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`)
|
||
- 自动监视/取消监视文件
|
||
- 响应文件变化事件
|
||
- 显示用户通知
|
||
|
||
## 使用流程
|
||
|
||
1. **打开文件**
|
||
```
|
||
用户双击文件 → 文件在编辑器中打开 → 系统自动开始监视
|
||
```
|
||
|
||
2. **外部修改文件**
|
||
```
|
||
其他程序修改文件 → 系统检测到变化 → 触发处理逻辑
|
||
```
|
||
|
||
3. **自动处理**
|
||
```
|
||
检查是否有修改 → 无修改:自动重载 | 有修改:弹出对话框
|
||
```
|
||
|
||
4. **关闭文件**
|
||
```
|
||
用户关闭文件 → 系统自动停止监视该文件
|
||
```
|
||
|
||
## 注意事项
|
||
|
||
### 性能考虑
|
||
|
||
- 监视器使用 `{ 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 客户端
|
||
|