2

从应用程序内部将应用程序内部设置导入/导出到文件的最佳方法是什么?

我有 Settings.settings 文件,winform UI 绑定到设置文件,我想导入/导出设置,类似于 Visual Studio 导入/导出设置功能。

4

4 回答 4

2

如果您使用的是 Settings.settings 文件,它会保存到配置文件中。通过在更新设置后调用 YourNamespace.Properties.Settings.Save(),它们将被保存到配置文件中。

但是,我不知道您所说的“多组设置”是什么意思。如果设置是用户设置,则每个用户都有自己的一组设置。如果您对单个用户有多组设置,您可能不应该使用 .settings 文件;相反,您将要使用数据库。

于 2008-09-17T22:07:18.543 回答
0

您可以使用绑定到表单的 DataSet。您可以保存/恢复它。

于 2008-09-17T21:52:07.330 回答
0

您可以只使用部分,还是出于特定原因拆分到其他文件?

于 2008-09-17T21:52:12.153 回答
0

我使用的一种久经考验的方法是设计一个设置容器类。这个容器类可以有不同类型的设置类别的子类。它运行良好,因为您通过属性名称引用您的“设置”,因此如果将来发生变化,您将收到编译时错误。它也是可扩展的,因为您始终可以通过向各个设置类添加更多属性来创建新设置,并将默认值分配给将在旧版本的应用程序中不存在特定设置时使用的属性的私有变量。保存新容器后,新设置也将保留。另一个优点是 XML 明显的人机/计算机可读性,这对设置非常有用。

要保存,请将容器对象序列化为 XML 数据,然后将数据写入文件。要加载,请从文件中读取数据并反序列化回您的设置容器类。

通过标准 C# 代码进行序列化:

public static string SerializeToXMLString(object ObjectToSerialize)
MemoryStream mem = new MemoryStream();          
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(ObjectToSerialize.GetType());
ser.Serialize(mem,ObjectToSerialize);                       
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(mem.ToArray());

通过标准 C# 代码反序列化:

public static object DeSerializeFromXMLString(System.Type TypeToDeserialize, string xmlString)
byte[] bytes = System.Text.Encoding.UTF8.GetBytes(xmlString);
MemoryStream mem = new MemoryStream(bytes);         
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(TypeToDeserialize);
return ser.Deserialize(mem);

可序列化设置类的最后一个好处是因为它是一个对象,您可以使用 IntelliSense 快速导航到特定设置。

注意:实例化设置容器类后,应使其成为另一个静态管理类的静态属性(如果需要,可以将其称为 SettingsManager)此管理类允许您从应用程序中的任何位置访问您的设置(因为它是静态的) 并且您还可以使用静态函数来处理类的加载和保存。

于 2008-09-17T22:12:41.527 回答