0

我目前正在使用一个临时 xml 文件来保存配置设置并且它正在工作,但它不是它需要的位置。

它是这样的:

<XmlDoc>

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

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

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

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

<XmlDoc>

编写代码的方式是首先读取 DefaultSettings,然后是 Company(覆盖 DefaultSettings),然后是 Workstation 设置(覆盖 DefaultSettings 或 Company Settings),然后是 Workstations,然后是 User... last read wins , 空白除外。他们不清除字段。在上面的示例中,ExitProgramMessage 最终会是 Y。

我遇到了几个问题。

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

它只是不容易使用,而且绝对不直观。

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

xml 是正确的方法吗?我应该走一条不同的路线吗?我们还没有数据库选项,只有平面文件。

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

任何想法将不胜感激。

谢谢!

4

2 回答 2

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

于 2012-07-13T16:02:08.283 回答
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; } }
}
于 2012-07-13T16:07:08.920 回答