添加项目文件。

This commit is contained in:
2025-12-07 20:25:27 +08:00
parent 52ad3bd1e4
commit b866365968
31 changed files with 16642 additions and 0 deletions

View File

@@ -0,0 +1,124 @@
# 备份功能优化说明
## 问题描述
原始的"应用并保存"功能在创建备份文件时,如果`.bak`文件已存在,会直接覆盖现有备份,没有提供用户选择或保留历史备份的选项。
## 优化方案
采用最小改动方案,在现有的`ApplyToolOrderToDrillTape`方法中添加智能备份逻辑:
### 功能特性
1. **智能检测**:自动检测`.bak`文件是否已存在
2. **用户选择**:提供三种处理选项
- 覆盖现有备份文件
- 创建带时间戳的新备份文件
- 取消保存操作
3. **时间戳格式**:使用`yyyyMMdd_HHmmss`格式,确保文件名唯一且易于识别
4. **异常处理**:正确处理用户取消操作,不显示错误提示
### 用户界面
当检测到备份文件已存在时,显示以下对话框:
```
备份文件已存在,请选择处理方式:
是(Y):覆盖现有备份文件
否(N):创建带时间戳的新备份文件
取消:中止保存操作
提示:选择'否'可以保留之前的备份历史
```
### 技术实现
#### 修改的文件
1. **MainWindowViewModel.cs**
- 修改`ApplyToolOrderToDrillTape`方法
- 添加备份文件检测和用户选择逻辑
- 改进异常处理
2. **MainWindow.xaml.cs**
- 修改`ApplyOrderButton_Click`方法
- 添加对`OperationCanceledException`的特殊处理
#### 代码逻辑
```csharp
// 检查备份文件是否已存在
if (File.Exists(backupFilePath))
{
var result = MessageBox.Show(
"备份文件已存在,请选择处理方式:\n\n" +
"是(Y):覆盖现有备份文件\n" +
"否(N):创建带时间戳的新备份文件\n" +
"取消:中止保存操作\n\n" +
"提示:选择'否'可以保留之前的备份历史",
"备份选项",
MessageBoxButton.YesNoCancel,
MessageBoxImage.Question);
switch (result)
{
case MessageBoxResult.Yes:
// 覆盖现有备份文件
File.Copy(OriginalFilePath, backupFilePath, true);
break;
case MessageBoxResult.No:
// 创建带时间戳的新备份文件
string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
string timestampBackupPath = $"{OriginalFilePath}.{timestamp}.bak";
File.Copy(OriginalFilePath, timestampBackupPath);
break;
case MessageBoxResult.Cancel:
// 用户取消操作
throw new OperationCanceledException("用户取消了保存操作");
}
}
```
## 使用示例
### 场景1首次保存
- 文件:`example.drl`
- 备份:创建`example.drl.bak`
### 场景2再次保存选择覆盖
- 文件:`example.drl`
- 现有备份:`example.drl.bak`
- 结果:覆盖`example.drl.bak`
### 场景3再次保存选择创建时间戳备份
- 文件:`example.drl`
- 现有备份:`example.drl.bak`
- 结果:创建`example.drl.20231207_091600.bak`
## 优势
1. **数据安全**:避免意外覆盖重要备份
2. **历史保留**:可以保留多个版本的备份文件
3. **用户控制**:用户可以根据需要选择备份策略
4. **最小改动**:不影响现有功能,只增强备份逻辑
5. **向后兼容**:保持原有的工作流程
## 未来扩展建议
1. **配置化**:允许用户设置默认备份策略
2. **自动清理**:定期清理过期的备份文件
3. **备份管理**:提供备份文件管理界面
4. **压缩备份**:对大文件提供压缩备份选项
## 测试
可以使用`BackupTest.cs`类来测试备份功能:
```csharp
BackupTest.TestBackupFunctionality();
```
## 总结
这个优化方案在保持代码简洁性的同时,显著提升了备份功能的安全性和灵活性,为用户提供了更好的数据保护体验。