2014-09-19 4 views
0

Добрый вечер; У меня есть приложение с раскрывающимся списком; Этот выпадающий список предназначен для списка часто посещаемых веб-сайтов, которые могут быть изменены пользователем. Мой вопрос заключается в том, как сохранить эти значения в такой усадьбе, которая позволит пользователям изменять ее. Пример; Я, как пользователь, решил, что хочу, чтобы google стал моим первым веб-сайтом, а youtube - вторым.Отслеживание пользовательской настройки C#

Я рассмотрел вопрос о создании файла настроек, однако целесообразно ли разместить 20+ сайтов в файле настроек, а затем загрузить их при запуске? Или локальная база данных, но это может быть излишним для простой необходимости.

Просьба указать мне в правильном направлении.

+1

Как вы в настоящее время сохраняете свой список (где вы его загружаете и где вы его сохраняете)? Можете ли вы опубликовать код? –

+1

Это будет зависеть от количества сайтов, которые вы говорите, но для небольших сумм (100>) я не вижу проблем с файлами настроек. – Pogrindis

+1

Использование реестра - это еще один вариант. – HABO

ответ

2

Учитывая, что вы уже исключили базу данных (возможно, по правильным причинам .. как это может быть за убийство для небольшого приложения), я бы рекомендовал записать данные в локальный файл .. но не обычный текст .. Но предпочтительно сериализованный либо как XML, либо JSON.

Этот подход имеет по крайней мере два преимущества -

  1. Более сложные данные могут быть сохранены в будущем .. например - в то время как заказ может быть неявным, это можно сделать явные .. или дополнительные данные, как в последний раз url был использован и т. д.

  2. Структурированные данные легче проверить на случайное повреждение. Если это был обычный текстовый файл .. Это будет намного сложнее обеспечить его целостность.

+1

+1 XML Сериализация кажется, что она * может * также быть переборкой, но определенно хорошая вещь, чтобы рассмотреть. – BradleyDotNET

+0

Согласовано. Я включил XML для полноты, но JSON, безусловно, легче XML .. и имеет довольно хорошую поддержку для чтения и письма сейчас через несколько дней. –

1

Вам явно нужно какое-то упорство, для которой есть несколько вариантов:

  1. Локальная база данных - Как уже отмечалось, общее массовое убийство. Вы просто хранить список, а не реляционных данных

  2. Простой текстовый файл - Довольно легко, но, возможно, не самый «профессиональный» путь. Использование сериализации XML в этот файл позволит использовать сложные типы данных.

  3. Файл настроек - Эти настройки действительно являются настройками? Если да, то это имеет смысл.

  4. Registry - Это отлично подходит для настроек, с которыми вы не хотите, чтобы ваши пользователи когда-либо вручную рушались. Вероятно, это не самый лучший вариант для значительного количества данных, хотя

Я бы пошел с номером 2. Не похоже, что вам нужна какая-нибудь причудливая кодировка или безопасность, поэтому просто сохраните все в текстовом файле. * .ini файлы, как правило, соответствуют этому описанию, но вы можете использовать любое расширение, которое вы хотите. Файл настроек не кажется правильным местом для этого сценария.

+1

Не забывайте реестр! : p –

+1

@RufusL Отличная точка, я добавил ее. Не там, где я бы поставил список чего угодно, хотя :) – BradleyDotNET

+0

Спасибо! Я буду избегать файла настроек; Я собираюсь преследовать файл .ini, кажется лучшим вариантом для моих нужд! :) – ModS

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

Смежные вопросы