配置文件设置 - 需要输入

时间:2012-07-13 15:53:11

标签: c# xml configuration

我目前正在使用adhoc xml文件来保存配置设置并且它正在运行,但它不是它需要的位置。

它是这样的:

<XmlDoc>

    <DefaultSettings>
        <ExitProgramMessage>Y</ExitProgramMessage>
    <DefaultSettings>

    <Company>
        <ExitProgramMessage>N</ExitProgramMessage>
    <Company>

    <Workstation>
        <ExitProgramMessage>N</ExitProgramMessage>
    </Workstation>

    <User>
        <ExitProgramMessage>Y</ExitProgramMessage>
    <User>

<XmlDoc>

编写代码的方式是首先读取DefaultSettings,然后读取公司(覆盖DefaultSettings),然后是Workstation设置(覆盖DefaultSettings或Company Settings),然后是工作站,然后是User ...最后读取胜利,但空白除外。他们没有清除字段。在上面的示例中,ExitProgramMessage最终将为Y。

我遇到了几个问题。

  1. 我不能轻易添加更多级别,因为它们是硬编码的
  2. 我必须手动读取每个节点,因为它不是标准的xml格式,这意味着需要手动编辑文件,这总会导致问题。
  3. 这不容易使用,绝对不直观。

    那么,话虽如此,我应该如何实现这一点,我可以创建一个屏幕来更新设置?

    xml是正确的方法吗?我应该采用不同的方式吗?我们还没有数据库选项,只有平面文件。

    此外,这些设置驻留在具有网络用户访问的共享驱动器的服务器上。因此,这些不能是保存在注册表中的设置或用户特有的任何设置。

    非常感谢任何想法。

    谢谢!

2 个答案:

答案 0 :(得分:1)

我对你的场景的建议是查看你可以在其中提供任何类型的Settings.Properties并在运行时更新它们

使用Settings.Properties的一个非常好的示例是您可以将应用程序的状态保存在其中

有关详细信息,请参阅链接

http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

http://msdn.microsoft.com/en-us/library/bb397755.aspx

答案 1 :(得分:0)

使用几个班级轻松处理。一个例子:

读取值:

Settings settings = new Settings(file);
var company = settings["Company"].ExitProgramMessage;

写一个值:

using(Settings settings = new Settings(file))
{
    settings["Workstation"].ExitProgramMessage = "Y";
}

课程如下:

public class Settings : IDisposable
{
    XElement self;
    FileInfo file;
    public Settings(FileInfo file)
    {
        if (file.Exists)
            self = XElement.Load(file.FullName);
        else
            self = new XElement("XmlDoc");
        this.file = file;
    }

    public Setting this[string name]
    {
        get
        {
            XElement x = self.Element(name);
            if (null == x)
                self.Add(x = new XElement(name));
            return new Setting(x, name);
        }
    }

    public void Dispose()
    {
        self.Save(file.FullName);
    }
}

public class Setting
{
    XElement self;
    string name;
    public Setting(XElement xsetting, string name)
    {
        self = xsetting;
        this.name = name;
    }

    public string ExitProgramMessage
    {
        get
        {
            XElement x = self.Element("ExitProgramMessage");
            if (null == x)
                return "Unknown"; // default value?
            return (string)x;
        }
        set
        {
            XElement x = self.Element("ExitProgramMessage");
            if (null == x)
                self.Add(new XElement("ExitProgramMessage", value));
            else
                x.Value = value;
        }
    }

    public string Name { get { return name; } }
}