Files
AohDrllTools/Docs/备份功能优化说明.md
2025-12-07 20:25:27 +08:00

124 lines
3.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 备份功能优化说明
## 问题描述
原始的"应用并保存"功能在创建备份文件时,如果`.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();
```
## 总结
这个优化方案在保持代码简洁性的同时,显著提升了备份功能的安全性和灵活性,为用户提供了更好的数据保护体验。