1

我是stackoverflow的新手,但我认为我应该试一试......

所以我想做的是将变量保存在其他程序可以访问的文件中......例如,我有一个设置应用程序来处理所有设置数据(例如数据库信息、字符串、数字,或布尔值)。我的想法是将它们保存到像属性文件或文本文件这样的文件中,另一个程序可以读取它们并修改该设置文件。谁能指出我正确的方向?

谢谢 waco001

4

5 回答 5

3

如果您使用 C#,我建议您将所有设置放在一个单独的类中,然后使用 XmlSerialization 来保存它,这样您就可以使用最少的代码来使用功能,并且您可以以格式保存数据其他应用程序易于阅读。

有多个示例可用,例如: http ://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm

于 2012-12-30T22:50:05.913 回答
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);

希望能帮助到你。

于 2012-12-30T23:12:38.940 回答
1

尝试使用 Visual Studio 项目中支持的 App.config。

于 2012-12-30T22:47:55.777 回答
0

典型的方法是创建一个XmlDocument,用恰当命名的节点和属性填充它,然后通过Save(). 这样做的好处是,大多数其他环境都能够读取 XML 并对其进行解析。

另一种“通用语言”是 JSON,它可以很容易地通过大多数其他环境编写JSON.NET并被大多数其他环境“理解”。

于 2012-12-30T22:49:14.653 回答
0

如果您只想在应用程序之间共享数据,您应该研究 WCF。

或者,您可以使用现有的 .NET API for XML 创建和解析数据。然后使用系统IO将其存储到硬盘中。

于 2012-12-30T22:51:00.373 回答