我是stackoverflow的新手,但我想我应该试一试......
所以我要做的是将变量保存在其他程序可以访问的文件中......例如,我有一个设置应用程序来处理所有设置数据(例如数据库信息,字符串,数字或布尔)。我想的是将它们保存到属性文件或文本文件中,其他程序可以读取它们并修改该设置文件。有人可以指点我正确的方向吗?
由于 waco001
答案 0 :(得分:3)
如果您正在使用C#,我建议您将所有设置放在一个单独的类中,然后使用XmlSerialization来保存它,这样您就可以使用最少量的代码处理功能,并且您将获得数据以其他应用程序易于阅读的格式保存。
有多个样本可供使用,例如: http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm
答案 1 :(得分:1)
尝试使用visual studio项目支持的App.config。
答案 2 :(得分:1)
创建一个设置类并对其进行序列化/反序列化,如果您将配置封装在另一个对象中,这还有使用属性网格管理它的好处,我通常使用我的配置文件执行此操作,这是一个小例子:
using System;
using System.Text;
using System.Xml;
using System.Xml.Serialization;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Generate.Test
{
/// <summary>
/// The configuration class.
/// </summary>
[Serializable, XmlRoot("generate-configuration")]
public class Configuration : ISerializable
{
#region Fields
private string inputPath = string.Empty;
private string outputPath = string.Empty;
private int maxCount = 0;
#endregion
#region Constructors
/// <summary>
/// Initializes a new instance of the <see cref="Configuration" /> class.
/// </summary>
public Configuration()
{
}
#endregion
#region Properties
/// <summary>
/// Gets or sets the output path.
/// </summary>
/// <value>
/// The output path.
/// </value>
[XmlElement("output-path")]
public string OutputPath
{
get { return this.outputPath; }
set { this.outputPath = value; }
}
/// <summary>
/// Gets or sets the input path.
/// </summary>
/// <value>
/// The input path.
/// </value>
[XmlElement("input-path")]
public string InputPath
{
get { return this.inputPath; }
set { this.inputPath = value; }
}
/// <summary>
/// Gets or sets the max count.
/// </summary>
/// <value>
/// The max count.
/// </value>
[XmlElement("max-count")]
public int MaxCount
{
get { return this.maxCount; }
set { this.maxCount = value; }
}
#endregion
#region ISerializable Members
/// <summary>
/// Gets the object data.
/// </summary>
/// <param name="info">The info.</param>
/// <param name="context">The context.</param>
/// <exception cref="System.ArgumentNullException">thrown when the info parameter is empty.</exception>
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
if (info == null)
throw new System.ArgumentNullException("info");
info.AddValue("output-path", this.OutputPath);
info.AddValue("input-path", this.InputPath);
info.AddValue("max-count", this.MaxCount);
}
#endregion
}
}
所以要反序列化(_configurationPath是存储配置的xml的路径):
if (File.Exists(_configurationPath))
{
try
{
XmlSerializer serializer = new XmlSerializer(typeof(Configuration));
Stream stream = new FileStream(_configurationPath, FileMode.Open, FileAccess.Read);
Configuration config = (Configuration)serializer.Deserialize(stream);
_inputPath = config.InputPath;
_outputPath = config.OutputPath;
_maxCount = config.MaxCount;
}
catch (Exception exception)
{
Console.WriteLine("Error cargando el archivo de configuración '{0}':\n{1}", _configurationPath, exception);
}
}
并序列化:
Configuration configuration = new Configuration(); // Create the object
// Set the values
configuration.InputPath = @".\input";
configuration.OutputPath = @".\output";
configuration.MaxCount = 1000;
// Serialize
XmlSerializer serializer = new XmlSerializer(typeof(Configuration));
Stream stream = new FileStream(_configurationPath, FileMode.Open, FileAccess.Write);
serializer.Serialize(stream, configuration);
希望它有所帮助。
答案 3 :(得分:0)
典型的方法是创建XmlDocument
,用适当命名的节点和属性填充它,并通过Save()
写出来。这样做的好处是,大多数其他环境都能够读取XML并解析它。
另一个“通用语言”是JSON,可以通过JSON.NET
轻松编写,并被大多数其他环境“理解”。
答案 4 :(得分:0)
如果您只想在应用程序之间共享数据,则应该查看WCF。
或者您可以使用现有的.NET API for XML来创建和解析数据。然后使用系统IO将其存储到硬盘驱动器中。