| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- using System;
- using System.IO;
- using System.Runtime.Serialization.Formatters.Binary;
- using TeamAAS.FlowEditor.Models;
- namespace TeamAAS.FlowEngine.Execution
- {
- /// <summary>
- /// 流程文件持久化(.aas)。
- /// 使用 BinaryFormatter 二进制序列化——CogToolBlock 等 Cognex 对象
- /// 实现了 ISerializable,可跟着 FlowGraph 一起完整序列化/反序列化。
- /// </summary>
- public static class FlowFileStore
- {
- /// <summary>
- /// 保存流程图(二进制)。失败返回 false 并写日志。
- /// </summary>
- public static bool Save(FlowGraph graph, string path)
- {
- if (graph == null || string.IsNullOrEmpty(path)) return false;
- try
- {
- var dir = Path.GetDirectoryName(path);
- if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir))
- Directory.CreateDirectory(dir);
- #pragma warning disable SYSLIB0011
- var formatter = new BinaryFormatter();
- using (var stream = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None))
- {
- formatter.Serialize(stream, graph);
- }
- #pragma warning restore SYSLIB0011
- return true;
- }
- catch (Exception ex)
- {
- AppLogger.Error($"流程保存失败: {path}", ex, nameof(FlowFileStore));
- return false;
- }
- }
- /// <summary>
- /// 加载流程图(二进制)。
- /// </summary>
- public static FlowGraph Load(string path)
- {
- if (string.IsNullOrEmpty(path) || !File.Exists(path)) return null;
- try
- {
- #pragma warning disable SYSLIB0011
- var formatter = new BinaryFormatter();
- // 绑定器:算子程序集迁移后旧流程仍可加载(未命中映射时与默认行为完全一致)
- formatter.Binder = FlowSerializationBinder.Instance;
- using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.None))
- {
- return (FlowGraph)formatter.Deserialize(stream);
- }
- #pragma warning restore SYSLIB0011
- }
- catch (Exception ex)
- {
- AppLogger.Error($"流程加载失败: {path}", ex, nameof(FlowFileStore));
- return null;
- }
- }
- }
- }
|