Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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# 如何使用可读写的本地XML设置?_C#_Xml_.net 4.0_Settings_Rapid Prototyping - Fatal编程技术网

C# 如何使用可读写的本地XML设置?

C# 如何使用可读写的本地XML设置?,c#,xml,.net-4.0,settings,rapid-prototyping,C#,Xml,.net 4.0,Settings,Rapid Prototyping,我在这里找到了与我需要的相似的东西: 但这对我来说不太合适。用户设置存储在一些较远的位置,如C:\documents and settings\[username]\local settings\application data\[your application],但我无权访问这些文件夹,无法将设置文件从一台计算机复制到另一台计算机,也无法完全删除该文件。此外,将设置xml文件放在应用程序旁边,并复制/发送这两个文件将非常方便。这是用于演示软件(这是一种合法的编码任务),将由该领域的非技术人员

我在这里找到了与我需要的相似的东西: 但这对我来说不太合适。用户设置存储在一些较远的位置,如
C:\documents and settings\[username]\local settings\application data\[your application]
,但我无权访问这些文件夹,无法将设置文件从一台计算机复制到另一台计算机,也无法完全删除该文件。此外,将设置xml文件放在应用程序旁边,并复制/发送这两个文件将非常方便。这是用于演示软件(这是一种合法的编码任务),将由该领域的非技术人员使用。我需要快速完成这项工作,所以我需要重用一些现有的库,而不是编写自己的库。我需要使它易于使用和携带。我最不希望在午夜接到一个电话,说当通过我将构建的设置对话框进行编辑时,设置不会持久

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


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

您可以创建一个保存设置的类,然后用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);
    }
}

设置通常不存储在excutable旁边,主要有两个原因:1。用户通常没有对可执行文件文件夹的写入权限(例如,如果它在程序文件中);2.一台计算机可以有多个用户,每个用户都需要自己的设置。如果你想违背这方面的既定惯例,你最好有一个很好的理由(要知道,如果你这么做,各地的系统管理员都会恨你)。@Sven,我确实有我已经列出的理由。在实践中,我从未遇到过我无权访问的exe,但用户设置-我无法访问。谢谢,您可以添加更多详细信息吗?谢谢!使用
包装
var serializer=new XmlSerializer(typeof(Settings))
内部
是否没有用?@Hamish,这不是没有用,而是无效的,代码甚至不会编译,因为
XmlSerializer
没有实现
IDisposable