2012-07-13 156 views
0

我目前使用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),那么工作站设置(覆盖DefaultSettings或公司设置),然后工作站,然后用户...上次阅读胜,除了空白。他们不清理田地。在上面的例子中,ExitProgramMessage最终会是Y.

我遇到了几个问题。

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

这只是不容易使用,绝对不直观。

所以,这就是说,我应该如何实现这一点,我可以创建一个屏幕来更新设置?

xml是正确的路要走吗?我应该采用不同的路线吗?我们没有数据库选项,只有平面文件。

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

任何想法将不胜感激。

谢谢!

回答

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; } } 
}