跟踪用户定制' s#

时间:2014-09-19 00:25:14

标签: c#

晚上好;我有一个有下拉列表的应用程序;该下拉列表旨在是可由用户更改的常见访问网站的列表。 我的问题是如何将这些值存储在允许用户更改它的庄园中。 例;我作为用户,决定我想让谷歌成为我的第一个网站,而youtube是我的第二个网站。

我考虑制作“设置”文件,但将20多个网站放入设置文件然后在启动时加载它是否切实可行?或者是本地数据库,但这对于简单的需求来说可能是过度的。

请指出正确的方向。

3 个答案:

答案 0 :(得分:2)

鉴于你已经排除了数据库(可能是出于正确的原因......因为对于一个小应用程序可能会过度杀死),我建议将数据写入本地文件..但不是纯文本.. 但最好序列化为XML或JSON。

这种方法至少有两个好处 -

  1. 将来可以存储更复杂的数据。例如 - 虽然顺序可以是隐式的,但可以使其显式..或者像上次使用网址等其他数据等。

  2. 结构化数据更容易验证随机损坏..如果是纯文本文件..确保其完整性将更加困难。

答案 1 :(得分:1)

你显然需要某种持久性,有几种选择:

  1. 本地数据库       - 正如你所指出的那样,完全矫枉过正。您只是存储列表,而不是关系数据

  2. 简单文字文件      - 很简单,但也许不是最“专业”的方式。对此文件使用XML序列化将允许复杂的数据类型。

  3. 设置文件      - 这些偏好真的是设置吗?如果是,那么这是有道理的。

  4. 注册表 - 这对于您不希望用户手动搞乱的设置非常有用。可能不是大量数据的最佳选择
  5. 我会选择2号。听起来你不需要任何花哨的编码或安全性,所以只需将所有内容存储在文本文件中。 * .ini文件往往符合此描述,但您可以使用任何所需的扩展名。设置文件似乎不是方案的正确位置。

答案 2 :(得分:1)

最好的方法是在c#中使用Serializer和Deserializer的强大功能,这样你就可以在面向对象的文件中使用它了。与此同时,您不必担心存储到文件等...等等......

以下是我为您快速撰写的示例代码。

using System;
using System.IO;
using System.Collections;
using System.Xml.Serialization;

namespace ConsoleApplication3
{
    public class UrlSerializer
    {
        private static void Write(string filename)
        {
            URLCollection urls = new URLCollection();
            urls.Add(new Url { Address = "http://www.google.com", Order = 1 });
            urls.Add(new Url { Address = "http://www.yahoo.com", Order = 2 });
            XmlSerializer x = new XmlSerializer(typeof(URLCollection));
            TextWriter writer = new StreamWriter(filename);
            x.Serialize(writer, urls);
        }

        private static URLCollection Read(string filename)
        {
            var x = new XmlSerializer(typeof(URLCollection));
            TextReader reader = new StreamReader(filename);
            var urls = (URLCollection)x.Deserialize(reader);
            return urls;
        }
    }

    public class URLCollection : ICollection
    {
        public string CollectionName;
        private ArrayList _urls = new ArrayList();

        public Url this[int index]
        {
            get { return (Url)_urls[index]; }
        }

        public void CopyTo(Array a, int index)
        {
            _urls.CopyTo(a, index);
        }

        public int Count
        {
            get { return _urls.Count; }
        }

        public object SyncRoot
        {
            get { return this; }
        }

        public bool IsSynchronized
        {
            get { return false; }
        }

        public IEnumerator GetEnumerator()
        {
            return _urls.GetEnumerator();
        }

        public void Add(Url url)
        {
            if (url == null) throw new ArgumentNullException("url");
            _urls.Add(url);
        }
    }
}