⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configfile.cs

📁 手机软件开发..手机软件开发..手机软件开发..手机软件开发..
💻 CS
字号:
using System;
using System.IO;
using System.Xml;
using System.Text;

namespace Skyiv.Ben.PushBox.Common
{
  /// <summary>
  /// 管理配置文件: PushBox.cfg
  /// </summary>
  sealed class ConfigFile
  {
    const string ElmRoot = "PushBox"; // 配置文件的根元素
    const string ElmFiles = "files";
    const string ElmOption = "option";
    const string AttrMaxLevelSize = "maxlevelsize";
    const string AttrStepDelay = "stepdelay";
    const string AttrReplayDelay = "replaydelay";
    const string AttrSave = "save";
    const string ElmStack = "stack";
    const string AttrGroup = "group";
    const string AttrLevel = "level";
    const string AttrData = "data";

    int maxLevelSize; // 最大关尺寸(宽度和高度)
    int stepDelay;    // 移动时间间隔(毫秒)
    int replayDelay;  // 回放时间间隔(毫秒)
    bool isSave;      // 是否保护现场
    bool isSaveOem;   // 是否保护现场(第一次读取时的值)
    int group;        // 当前组数(0起始)
    string[] groups;  // 各组的数据文件主名
    int[] levels;     // 指明各组的当前关数(0起始)
    string steps;     // 工人移动路线,用于程序启动时恢复现场

    public int MaxLevelSize { get { return maxLevelSize; } set { maxLevelSize = value; } }
    public int StepDelay { get { return stepDelay; } set { stepDelay = value; } }
    public int ReplayDelay { get { return replayDelay; } set { replayDelay = value; } }
    public bool IsSave { get { return isSave; } set { isSave = value; } }
    public int Group { get { return group; } set { group = value; } }
    public string[] Groups { get { return groups; } }
    public int[] Levels { get { return levels; } }
    public string Steps { get { return steps; } }

    /// <summary>
    /// 装入配置文件
    /// </summary>
    public void LoadConfig()
    {
      maxLevelSize = Pub.DefaultMaxLevelSize;
      stepDelay = Pub.DefaultStepDelay;
      replayDelay = Pub.DefaultReplayDelay;
      isSave = isSaveOem = false;
      group = 0;
      int level = 0;
      XmlDocument doc = new XmlDocument();
      doc.Load(Pub.ConfigFileName);
      XmlElement elm = doc.DocumentElement[ElmOption];
      XmlAttributeCollection attrs;
      XmlAttribute attr;
      if (elm != null)
      {
        attrs = elm.Attributes;
        if ((attr = attrs[AttrMaxLevelSize]) != null)
        {
          try { maxLevelSize = int.Parse(attr.Value); }
          catch { }
          if (maxLevelSize < 1) maxLevelSize = 1;
        }
        if ((attr = attrs[AttrStepDelay]) != null)
        {
          try { stepDelay = int.Parse(attr.Value); }
          catch { }
          if (stepDelay < 0) stepDelay = 0;
          if (stepDelay > Pub.MaxDelay) stepDelay = Pub.MaxDelay;
        }
        if ((attr = attrs[AttrReplayDelay]) != null)
        {
          try { replayDelay = int.Parse(attr.Value); }
          catch { }
          if (replayDelay < 0) replayDelay = 0;
          if (replayDelay > Pub.MaxDelay) replayDelay = Pub.MaxDelay;
        }
        if ((attr = attrs[AttrSave]) != null)
        {
          try { isSave = isSaveOem = bool.Parse(attr.Value); }
          catch { }
        }
        if (isSave && (elm = doc.DocumentElement[ElmStack]) != null)
        {
          attrs = elm.Attributes;
          if ((attr = attrs[AttrGroup]) != null)
          {
            try { group = int.Parse(attr.Value) - 1; }
            catch { }
          }
          if ((attr = attrs[AttrLevel]) != null)
          {
            try { level = int.Parse(attr.Value) - 1; }
            catch { }
          }
          if ((attr = attrs[AttrData]) != null)
          {
            steps = attr.Value;
          }
        }
      }
      elm = doc.DocumentElement[ElmFiles];
      if (elm == null) throw new Exception("配置文件错:缺少<" + ElmFiles +">元素");
      XmlNodeList elms = elm.ChildNodes;
      if (elms.Count < 1) throw new Exception("配置文件错:<" + ElmFiles + ">元素必须至少包括一项");
      groups = new string[elms.Count];
      levels = new int[elms.Count];
      for (int i = 0; i < elms.Count; i++) groups[i] = elms[i].InnerText;
      if (group < 0) group = 0;
      if (group > groups.Length - 1) group = groups.Length - 1;
      if (level < 0) level = 0;
      levels[group] = level;
    }

    /// <summary>
    /// 保存组信息到配置文件
    /// </summary>
    /// <param name="groups">组信息</param>
    public void SaveConfig(string[] groups)
    {
      XmlDocument doc = new XmlDocument();
      if (File.Exists(Pub.ConfigFileName)) doc.Load(Pub.ConfigFileName);
      else
      {
        XmlElement root = doc.CreateElement(ElmRoot);
        root.AppendChild(doc.CreateElement(ElmFiles));
        doc.AppendChild(root);
      }
      XmlElement files = (doc.DocumentElement)[ElmFiles];
      if (files == null)
      {
        files = doc.CreateElement(ElmFiles);
        doc.DocumentElement.AppendChild(files);
      }
      files.RemoveAll();
      foreach (string s in groups)
      {
        XmlElement file = doc.CreateElement("file");
        file.InnerText = s;
        files.AppendChild(file);
      }
      SaveStack(doc, 0, 0, "");
      doc.Save(Pub.ConfigFileName);
    }

    /// <summary>
    /// 保存当前选项及当前走法到配置文件
    /// </summary>
    /// <param name="steps">当前走法</param>
    public void SaveConfig(Step[] steps)
    {
      if (!isSave && isSave == isSaveOem) return; // “保护现场”复选框没有选中,且程序启动时就没有选中
      XmlDocument doc = new XmlDocument();
      doc.Load(Pub.ConfigFileName);
      XmlElement elm = doc.DocumentElement[ElmOption];
      if (elm == null)
      {
        elm = doc.CreateElement(ElmOption);
        doc.DocumentElement.AppendChild(elm);
      }
      elm.SetAttribute(AttrSave, isSave.ToString()); // 保存“保护现场”复选框的状态
      if (isSave) // “保护现场”复选框已选中
      {
        elm.SetAttribute(AttrMaxLevelSize, maxLevelSize.ToString()); // 保存“最大关尺寸”
        elm.SetAttribute(AttrStepDelay, stepDelay.ToString()); // 保存“移动速度”
        elm.SetAttribute(AttrReplayDelay, replayDelay.ToString()); // 保存“回放速度”
        SaveStack(doc, group, levels[group], Pub.ToString(steps)); // 保存当前组数、当前关数和当前走法
      }
      doc.Save(Pub.ConfigFileName);
    }

    /// <summary>
    /// 保存当前组数、当前关数和当前走法到配置文件
    /// </summary>
    /// <param name="doc">配置文件</param>
    /// <param name="group">当前组数</param>
    /// <param name="level">当前关数</param>
    /// <param name="steps">当前走法</param>
    void SaveStack(XmlDocument doc, int group, int level, string steps)
    {
      XmlElement elm = doc.DocumentElement[ElmStack];
      if (elm == null)
      {
        elm = doc.CreateElement(ElmStack);
        doc.DocumentElement.AppendChild(elm);
      }
      elm.SetAttribute(AttrGroup, (group + 1).ToString()); // 保存当前组数
      elm.SetAttribute(AttrLevel, (level + 1).ToString()); // 保存当前关数
      elm.SetAttribute(AttrData, steps); // 保存当前走法
    }
  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -