【问题标题】:How to use the read/writeable local XML settings?如何使用读/写本地 XML 设置?
【发布时间】:2011-09-18 04:19:40
【问题描述】:

我在这里找到了类似于我需要的东西: http://www.codeproject.com/KB/cs/PropertiesSettings.aspx 但它并不完全适合我。用户设置存储在某个遥远的位置,例如C:\documents and settings\[username]\local settings\application data\[your application],但我无权访问这些文件夹,我无法将设置文件从一台计算机复制到另一台计算机,或完全删除该文件。此外,将设置 xml 文件放在应用程序旁边并复制/发送两者都非常方便。这用于演示软件(这是一种合法的编码任务类型),并将由该领域的非技术人员使用。我需要快速完成,所以我需要重用一些现有的库而不是自己编写。我需要让它易于使用和便携。我想要的最后一件事是在午夜接到一个电话,说通过我将构建的设置对话框进行编辑时设置不会持续存在。

因此,用户设置存储在天知道的位置,而应用程序设置是只读的(不行)。还有什么我可以做的吗?我认为 app.config 文件有多种用途,我想我曾经看到它以我想要的方式使用,我只是找不到链接。

如果有什么不清楚的地方请告诉我。

【问题讨论】:

  • 设置通常不存储在可执行文件旁边的原因主要有两个: 1. 用户通常没有对可执行文件文件夹的写入权限(例如,如果它在 Program Files 中); 2. 一台计算机可以有多个用户,每个用户都需要自己的设置。如果你想违反这方面的既定惯例,你最好有一个很好的理由(并且知道如果你这样做,世界各地的系统管理员都会讨厌你)。
  • @Sven,我确实有我已经列出的原因。在实践中,我从未遇到过我无权访问的 exe,但用户设置 - 我无法访问。

标签: c# xml .net-4.0 settings rapid-prototyping


【解决方案1】:

您可以创建一个包含您的设置的类,然后对其进行 XML 序列化:

public class Settings
{
    public string Setting1 { get; set; }
    public int Setting2 { get; set; }
}

static void SaveSettings(Settings settings)
{
    var serializer = new XmlSerializer(typeof(Settings));
    using (var stream = File.OpenWrite(SettingsFilePath))
    {
        serializer.Serialize(stream, settings);
    }
}

static Settings LoadSettings()
{
    if (!File.Exists(SettingsFilePath))
        return new Settings();

    var serializer = new XmlSerializer(typeof(Settings));
    using (var stream = File.OpenRead(SettingsFilePath))
    {
        return (Settings)serializer.Deserialize(stream);
    }
}

【讨论】:

  • 谢谢,你能补充一点吗?
  • 谢谢!将var serializer = new XmlSerializer(typeof(Settings)) 包裹在using 中会没用吗?
  • @Hamish,那不会没用,那将是无效的,代码甚至无法编译,因为XmlSerializer 没有实现IDisposable
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
  • 2010-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-31
  • 1970-01-01
相关资源
最近更新 更多