c#如何在应用程序中保存配置数据的最佳方式。

19 浏览
0 Comments

c#如何在应用程序中保存配置数据的最佳方式。

此问题已有答案 :

如何在 Windows Forms 应用程序中保存应用程序设置?

在 C# 应用程序中保存配置数据的最佳方法是什么?

请注意,这些数据可能会动态更改。

我知道可以使用 ConfigurationManager 类。但是我听说这不是一个好的实现方法。

admin 更改状态以发布 2023年5月19日
0
0 Comments

使用内置的设置机制。但是不要碰配置管理器,使用您的设置就像

Properties.Settings.Default.x 

0
0 Comments

一种简单的方法是使用配置数据对象,在本地文件夹中将其保存为应用程序名称的xml文件,在启动时读取它。\n以下是一个存储窗体位置和大小的示例。\n配置数据对象是强类型的,易于使用:\n

[Serializable()]
public class CConfigDO
{
    private System.Drawing.Point m_oStartPos;
    private System.Drawing.Size m_oStartSize;
    public System.Drawing.Point StartPos
    {
        get { return m_oStartPos; }
        set { m_oStartPos = value; }
    }
    public System.Drawing.Size StartSize
    {
        get { return m_oStartSize; }
        set { m_oStartSize = value; }
    }
}

\n用于保存和加载的管理器类:\n

public class CConfigMng
{
    private string m_sConfigFileName = System.IO.Path.GetFileNameWithoutExtension(System.Windows.Forms.Application.ExecutablePath) + ".xml";
    private CConfigDO m_oConfig = new CConfigDO();
    public CConfigDO Config
    {
        get { return m_oConfig; }
        set { m_oConfig = value; }
    }
    // Load configfile
    public void LoadConfig()
    {
        if (System.IO.File.Exists(m_sConfigFileName))
        {
            System.IO.StreamReader srReader = System.IO.File.OpenText(m_sConfigFileName);
            Type tType = m_oConfig.GetType();
            System.Xml.Serialization.XmlSerializer xsSerializer = new System.Xml.Serialization.XmlSerializer(tType);
            object oData = xsSerializer.Deserialize(srReader);
            m_oConfig = (CConfigDO)oData;
            srReader.Close();
        }
    }
    // Save configfile
    public void SaveConfig()
    {
        System.IO.StreamWriter swWriter = System.IO.File.CreateText(m_sConfigFileName);
        Type tType = m_oConfig.GetType();
        if (tType.IsSerializable)
        {
            System.Xml.Serialization.XmlSerializer xsSerializer = new System.Xml.Serialization.XmlSerializer(tType);
            xsSerializer.Serialize(swWriter, m_oConfig);
            swWriter.Close();
        }
    }
}

\n现在你可以在你的窗体的加载和关闭事件中使用它:\n

    private void Form1_Load(object sender, EventArgs e)
    {
        // Load config
        oConfigMng.LoadConfig();
        if (oConfigMng.Config.StartPos.X != 0 || oConfigMng.Config.StartPos.Y != 0)
        {
            Location = oConfigMng.Config.StartPos;
            Size = oConfigMng.Config.StartSize;
        }
    }
    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        // Save config
        oConfigMng.Config.StartPos = Location;
        oConfigMng.Config.StartSize = Size;
        oConfigMng.SaveConfig();
    }

\n生成的xml文件也是可读的:\n



  
    70
    278
  
  
    253
    229
  

\n非常简单,你觉得呢?

0