提交
This commit is contained in:
@ -1,155 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Text.Json;
|
||||
using System.Windows.Forms;
|
||||
using DH.Commons.Enums;
|
||||
using DH.Devices.Devices;
|
||||
using DH.Devices.PLC;
|
||||
|
||||
namespace DH.Commons.Helper
|
||||
{
|
||||
// 配置数据模型
|
||||
public class AppConfig
|
||||
{
|
||||
public List<CameraBase> Cameras { get; set; } = new List<CameraBase>();
|
||||
public List<PLCBase> PLCs { get; set; } = new List<PLCBase>();
|
||||
public List<DetectionConfig> Detections { get; set; } = new List<DetectionConfig>();
|
||||
}
|
||||
|
||||
// 配置管理工具类
|
||||
public static class ConfigManager
|
||||
{
|
||||
private static readonly JsonSerializerOptions _jsonOptions = new JsonSerializerOptions
|
||||
{
|
||||
WriteIndented = true,
|
||||
PropertyNamingPolicy = JsonNamingPolicy.CamelCase,
|
||||
IgnoreNullValues = true
|
||||
};
|
||||
|
||||
// 默认路径配置
|
||||
private static readonly string DefaultConfigDir = Path.Combine(
|
||||
Application.StartupPath,
|
||||
"configs"
|
||||
);
|
||||
|
||||
public static readonly string DefaultConfigPath = Path.Combine(
|
||||
DefaultConfigDir,
|
||||
"appsettings.json"
|
||||
);
|
||||
|
||||
/// <summary>
|
||||
/// 保存配置文件(自动处理目录和备份)
|
||||
/// </summary>
|
||||
/// <param name="config">配置对象</param>
|
||||
/// <param name="filePath">可选文件路径</param>
|
||||
public static void SaveConfig(AppConfig config, string filePath = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 使用默认路径如果未指定
|
||||
filePath ??= DefaultConfigPath;
|
||||
|
||||
// 确保配置目录存在
|
||||
var configDir = Path.GetDirectoryName(filePath);
|
||||
if (!Directory.Exists(configDir))
|
||||
{
|
||||
Directory.CreateDirectory(configDir);
|
||||
}
|
||||
|
||||
// 备份已有配置
|
||||
if (File.Exists(filePath))
|
||||
{
|
||||
BackupConfig(filePath);
|
||||
}
|
||||
|
||||
// 序列化并保存
|
||||
string json = JsonSerializer.Serialize(config, _jsonOptions);
|
||||
File.WriteAllText(filePath, json);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException("配置保存失败", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载配置文件
|
||||
/// </summary>
|
||||
/// <param name="filePath">可选文件路径</param>
|
||||
/// <returns>配置对象</returns>
|
||||
public static AppConfig LoadConfig(string filePath = null)
|
||||
{
|
||||
try
|
||||
{
|
||||
filePath ??= DefaultConfigPath;
|
||||
|
||||
if (!File.Exists(filePath))
|
||||
{
|
||||
return new AppConfig(); // 返回空配置而不是null
|
||||
}
|
||||
|
||||
string json = File.ReadAllText(filePath);
|
||||
return JsonSerializer.Deserialize<AppConfig>(json, _jsonOptions);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException("配置加载失败", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建带时间戳的备份文件
|
||||
/// </summary>
|
||||
private static void BackupConfig(string originalPath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 创建备份目录
|
||||
var backupDir = Path.Combine(
|
||||
Path.GetDirectoryName(originalPath),
|
||||
"backups"
|
||||
);
|
||||
|
||||
if (!Directory.Exists(backupDir))
|
||||
{
|
||||
Directory.CreateDirectory(backupDir);
|
||||
}
|
||||
|
||||
// 生成带时间戳的文件名
|
||||
string timestamp = DateTime.Now.ToString("yyyyMMdd_HHmmss");
|
||||
string fileName = $"{Path.GetFileNameWithoutExtension(originalPath)}_" +
|
||||
$"{timestamp}" +
|
||||
$"{Path.GetExtension(originalPath)}";
|
||||
|
||||
// 执行备份
|
||||
File.Copy(
|
||||
originalPath,
|
||||
Path.Combine(backupDir, fileName),
|
||||
overwrite: true
|
||||
);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
throw new InvalidOperationException("配置备份失败", ex);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建新的配置对象
|
||||
/// </summary>
|
||||
public static AppConfig CreateConfig(
|
||||
List<CameraBase> cameras = null,
|
||||
List<PLCBase> plcs = null,
|
||||
List<DetectionConfig> detections = null)
|
||||
{
|
||||
return new AppConfig
|
||||
{
|
||||
Cameras = cameras ?? new List<CameraBase>(),
|
||||
PLCs = plcs ?? new List<PLCBase>(),
|
||||
Detections = detections ?? new List<DetectionConfig>()
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user