我想要实现的非常简单:我有一个Windows窗体(。NET 3.5)应用程序使用路径来读取信息。用户可以使用我提供的选项表单修改此路径。
现在,我想将路径值保存到一个文件中以供以后使用。这将是保存到该文件中的众多设置之一。该文件将直接位于应用程序文件夹中。
我知道有三种选择:
配置文件(appname.exe.config)
注册表
自定义XML文件
我读到。net配置文件不能将值保存回配置文件。至于注册表,我想尽量远离它。
这是否意味着我应该使用自定义XML文件来保存配置设置?
如果是这样,我想看看代码的例子(c#)。
我看过其他关于这个问题的讨论,但我仍然不清楚。
public static class SettingsExtensions
{
public static bool TryGetValue<T>(this Settings settings, string key, out T value)
{
if (settings.Properties[key] != null)
{
value = (T) settings[key];
return true;
}
value = default(T);
return false;
}
public static bool ContainsKey(this Settings settings, string key)
{
return settings.Properties[key] != null;
}
public static void SetValue<T>(this Settings settings, string key, T value)
{
if (settings.Properties[key] == null)
{
var p = new SettingsProperty(key)
{
PropertyType = typeof(T),
Provider = settings.Providers["LocalFileSettingsProvider"],
SerializeAs = SettingsSerializeAs.Xml
};
p.Attributes.Add(typeof(UserScopedSettingAttribute), new UserScopedSettingAttribute());
var v = new SettingsPropertyValue(p);
settings.Properties.Add(p);
settings.Reload();
}
settings[key] = value;
settings.Save();
}
}
“这是否意味着我应该使用自定义XML文件来保存配置设置?”不,不一定。我们使用SharpConfig进行此类操作。
例如,如果配置文件是这样的
[General]
# a comment
SomeString = Hello World!
SomeInteger = 10 # an inline comment
我们可以像这样检索值
var config = Configuration.LoadFromFile("sample.cfg");
var section = config["General"];
string someString = section["SomeString"].StringValue;
int someInteger = section["SomeInteger"].IntValue;
它与。net 2.0及更高版本兼容。我们可以动态地创建配置文件,并在以后保存它。
来源:http://sharpconfig.net/
GitHub: https://github.com/cemdervis/SharpConfig
如果你使用Visual Studio,那么很容易获得持久化设置。在解决方案资源管理器中右键单击项目并选择属性。选择“设置”选项卡,如果“设置”不存在,则单击超链接。
使用Settings选项卡创建应用程序设置。Visual Studio创建文件设置。settings和settings . designer .settings包含从ApplicationSettingsBase继承的单例类settings。你可以从你的代码中访问这个类来读取/写入应用程序设置:
Properties.Settings.Default["SomeProperty"] = "Some Value";
Properties.Settings.Default.Save(); // Saves settings in application configuration file
此技术适用于控制台、Windows窗体和其他项目类型。
注意,您需要设置设置的scope属性。如果你选择了应用范围,那么Settings.Default。<你的属性>将是只读的。
参考:如何:在运行时使用c# - Microsoft Docs编写用户设置