2014-09-19 34 views
0

晚上好,我有一個應用程序有一個下拉列表;該下拉列表意味着可以由用戶更改的常用網站的列表。 我的問題是如何將這些值存儲在允許用戶更改它的莊園中。 示例;我作爲用戶,決定我希望谷歌成爲我的第一個網站,而YouTube則是我的第二個網站。跟蹤用戶定製的c#

我曾考慮製作一個「設置」文件,但是將20多個網站放入設置文件然後在啓動時加載它們是否可行?或者是一個本地數據庫,但這對於簡單的需求可能是過度的。

請指點我正確的方向。

+1

你目前如何堅持你的列表(你從哪裏加載它,以及你在哪裏保存它)?你能發佈代碼嗎? – 2014-09-19 00:26:44

+1

這將取決於你說的網站的數量,但少量(100>)我看到設置文件沒有問題。 – Pogrindis 2014-09-19 00:28:02

+1

使用註冊表是另一種選擇。 – HABO 2014-09-19 00:30:29

回答

2

鑑於你已經排除了數據庫(可能是正確的原因,因爲它可能會殺死一個小應用程序),我建議將數據寫入本地文件..但不是純文本.. 但最好串行化爲XML或JSON。

這種方法至少有兩個好處 -

  1. 更復雜的數據可以存儲在未來..例如 - 而爲了可以是隱式,它可以製成像上次那樣明確的..或其他數據網址被使用等..

  2. 結構化數據更容易驗證對隨機腐敗..如果它是一個純文本文件..它將是很難確保其完整性。

+1

+1 XML序列化看起來像*可能*也可能是矯枉過正,但絕對是一件值得考慮的事情。 – BradleyDotNET 2014-09-19 00:43:09

+0

同意..我包括完整性的XML,但是JSON肯定比XML更輕,並且現在有很好的讀寫支持。 – 2014-09-19 00:44:12

1

你顯然需要某種形式的持久性,爲此,有幾個選項:

  1. 本地數據庫 - 正如你所指出的那樣,總矯枉過正。你只是存儲列表,而不是關係型數據

  2. 簡單的文本文件 - 很容易,但也許不是最「專業」的方式。使用XML序列化到這個文件將允許複雜的數據類型。

  3. 設置文件 - 這些首選項是否真的設置?如果是,那麼這是有道理的。

  4. The Registry - 這對您不希望用戶手動混淆的設置非常有用。可能不是數據的顯著量雖然

最好的選擇我將與2號走這聽起來並不像你需要任何特殊的編碼或安全性,因此只是存儲在文本文件中的一切。 * .ini文件傾向於符合此描述,但您可以使用任何您想要的擴展名。設置文件似乎不適合方案的正確位置。

+1

不要忘記註冊表! :p – 2014-09-19 00:31:02

+1

@RufusL優秀點,我已經添加了。不是我會把任何東西的列表:) – BradleyDotNET 2014-09-19 00:32:17

+0

謝謝你!我將避開設置文件;我將追求.ini文件,看起來像是我需要的最佳選擇! :) – ModS 2014-09-19 00:38:23

1

最好的方法是在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); 
     } 
    } 
} 
+0

謝謝你的迴應! 我試圖實現這個方法,但Url沒有在當前上下文中定義;它正在拋出一個錯誤,我如何使它正確定義Url – ModS 2014-09-19 13:39:53