Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 配置文件设置-需要输入_C#_Xml_Configuration - Fatal编程技术网

C# 配置文件设置-需要输入

C# 配置文件设置-需要输入,c#,xml,configuration,C#,Xml,Configuration,我目前正在使用一个临时xml文件来保存配置设置,它正在工作,但它不在需要的地方 事情是这样的: <XmlDoc> <DefaultSettings> <ExitProgramMessage>Y</ExitProgramMessage> <DefaultSettings> <Company> <ExitProgramMessage>N</ExitPr

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

事情是这样的:

<XmlDoc>

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

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

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

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

<XmlDoc>

Y
N
N
Y
代码的编写方式是先读取默认设置,然后读取公司(覆盖默认设置),然后读取工作站设置(覆盖默认设置或公司设置),然后读取工作站,然后读取用户。。。除空格外,最后一次读取获胜。他们不清理田地。在上面的示例中,ExitProgramMessage将以Y结尾

我遇到了几个问题

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

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

    xml是正确的方法吗?我应该用这个换一条路吗?我们还没有数据库选项,只有平面文件

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

    任何想法都将不胜感激


    谢谢

    我对您的场景的建议是查看设置。属性您可以查看其中的任何类型,并在运行时更新它们

    使用Settings.Properties的一个很好的例子是,您可以在其中保存应用程序的状态

    有关更多信息,请参阅链接


    只需几个类即可轻松处理。例如:

    要读取值,请执行以下操作:

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