晚上好,我有一個應用程序有一個下拉列表;該下拉列表意味着可以由用戶更改的常用網站的列表。 我的問題是如何將這些值存儲在允許用戶更改它的莊園中。 示例;我作爲用戶,決定我希望谷歌成爲我的第一個網站,而YouTube則是我的第二個網站。跟蹤用戶定製的c#
我曾考慮製作一個「設置」文件,但是將20多個網站放入設置文件然後在啓動時加載它們是否可行?或者是一個本地數據庫,但這對於簡單的需求可能是過度的。
請指點我正確的方向。
晚上好,我有一個應用程序有一個下拉列表;該下拉列表意味着可以由用戶更改的常用網站的列表。 我的問題是如何將這些值存儲在允許用戶更改它的莊園中。 示例;我作爲用戶,決定我希望谷歌成爲我的第一個網站,而YouTube則是我的第二個網站。跟蹤用戶定製的c#
我曾考慮製作一個「設置」文件,但是將20多個網站放入設置文件然後在啓動時加載它們是否可行?或者是一個本地數據庫,但這對於簡單的需求可能是過度的。
請指點我正確的方向。
鑑於你已經排除了數據庫(可能是正確的原因,因爲它可能會殺死一個小應用程序),我建議將數據寫入本地文件..但不是純文本.. 但最好串行化爲XML或JSON。
這種方法至少有兩個好處 -
更復雜的數據可以存儲在未來..例如 - 而爲了可以是隱式,它可以製成像上次那樣明確的..或其他數據網址被使用等..
結構化數據更容易驗證對隨機腐敗..如果它是一個純文本文件..它將是很難確保其完整性。
+1 XML序列化看起來像*可能*也可能是矯枉過正,但絕對是一件值得考慮的事情。 – BradleyDotNET 2014-09-19 00:43:09
同意..我包括完整性的XML,但是JSON肯定比XML更輕,並且現在有很好的讀寫支持。 – 2014-09-19 00:44:12
你顯然需要某種形式的持久性,爲此,有幾個選項:
本地數據庫 - 正如你所指出的那樣,總矯枉過正。你只是存儲列表,而不是關係型數據
簡單的文本文件 - 很容易,但也許不是最「專業」的方式。使用XML序列化到這個文件將允許複雜的數據類型。
設置文件 - 這些首選項是否真的設置?如果是,那麼這是有道理的。
最好的選擇我將與2號走這聽起來並不像你需要任何特殊的編碼或安全性,因此只是存儲在文本文件中的一切。 * .ini文件傾向於符合此描述,但您可以使用任何您想要的擴展名。設置文件似乎不適合此方案的正確位置。
不要忘記註冊表! :p – 2014-09-19 00:31:02
@RufusL優秀點,我已經添加了。不是我會把任何東西的列表:) – BradleyDotNET 2014-09-19 00:32:17
謝謝你!我將避開設置文件;我將追求.ini文件,看起來像是我需要的最佳選擇! :) – ModS 2014-09-19 00:38:23
最好的方法是在c#中使用串行器和解串器的功能,它可以讓你在面向對象的文件中工作。同時你不需要擔心存儲到文件等等......
以下是我很快爲您寫的示例代碼。
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);
}
}
}
謝謝你的迴應! 我試圖實現這個方法,但Url沒有在當前上下文中定義;它正在拋出一個錯誤,我如何使它正確定義Url – ModS 2014-09-19 13:39:53
你目前如何堅持你的列表(你從哪裏加載它,以及你在哪裏保存它)?你能發佈代碼嗎? – 2014-09-19 00:26:44
這將取決於你說的網站的數量,但少量(100>)我看到設置文件沒有問題。 – Pogrindis 2014-09-19 00:28:02
使用註冊表是另一種選擇。 – HABO 2014-09-19 00:30:29