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

3.7 KiB
Raw Permalink Blame History

备份功能优化说明

问题描述

原始的"应用并保存"功能在创建备份文件时,如果.bak文件已存在,会直接覆盖现有备份,没有提供用户选择或保留历史备份的选项。

优化方案

采用最小改动方案,在现有的ApplyToolOrderToDrillTape方法中添加智能备份逻辑:

功能特性

  1. 智能检测:自动检测.bak文件是否已存在
  2. 用户选择:提供三种处理选项
    • 覆盖现有备份文件
    • 创建带时间戳的新备份文件
    • 取消保存操作
  3. 时间戳格式:使用yyyyMMdd_HHmmss格式,确保文件名唯一且易于识别
  4. 异常处理:正确处理用户取消操作,不显示错误提示

用户界面

当检测到备份文件已存在时,显示以下对话框:

备份文件已存在,请选择处理方式:

是(Y):覆盖现有备份文件
否(N):创建带时间戳的新备份文件
取消:中止保存操作

提示:选择'否'可以保留之前的备份历史

技术实现

修改的文件

  1. MainWindowViewModel.cs

    • 修改ApplyToolOrderToDrillTape方法
    • 添加备份文件检测和用户选择逻辑
    • 改进异常处理
  2. MainWindow.xaml.cs

    • 修改ApplyOrderButton_Click方法
    • 添加对OperationCanceledException的特殊处理

代码逻辑

// 检查备份文件是否已存在
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类来测试备份功能:

BackupTest.TestBackupFunctionality();

总结

这个优化方案在保持代码简洁性的同时,显著提升了备份功能的安全性和灵活性,为用户提供了更好的数据保护体验。