2014-09-19 8 views
0

안녕하세요; 드롭 다운 목록이있는 응용 프로그램이 있습니다. 이 드롭 다운 목록은 사용자가 변경할 수있는 일반적으로 방문한 웹 사이트의 목록입니다. 제 질문은 어떻게 이러한 값을 사용자가 변경할 수 있도록 저장하는 것입니다. 예; 나는 사용자로서 구글이 나의 첫 번째 웹 사이트가되고, 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. 레지스트리 - 이것은 사용자가 수동으로 혼란스럽지 않게하려는 설정에 유용합니다. 아마도 상당한 양의 데이터를위한 최적의 옵션이 아닐 것입니다.

숫자 2로 갈 것입니다. 멋진 인코딩이나 보안이 필요하지 않은 것처럼 들리므로 모든 것을 텍스트 파일에 저장하십시오. * .ini 파일은이 설명과 일치하는 경향이 있지만 원하는 확장명을 사용할 수 있습니다. 설정 파일이 의 올바른 위치와 같지 않습니다. 시나리오.

+1

레지스트리를 잊지 마세요! : p –

+1

@RufusL 우수 포인트, 추가했습니다. 아니지만 내가 아무것도의 목록을 넣을 게 아니에요 :) – BradleyDotNET

+0

고마워요! 나는 설정 파일을 지우겠다. 나는 .ini 파일을 추구 할 것이고, 내 필요를위한 최선의 선택처럼 보입니다! :) – ModS

1

가장 좋은 방법은 C#의 Serializer 및 Deserializer의 강력한 기능을 사용하는 것입니다.이 기능을 사용하면 Object Oriented 파일로 작업 할 수 있습니다. 동시에 파일 등 ...에 저장하는 것에 대해 걱정할 필요가 없습니다.

다음은 내가 작성한 샘플 코드입니다.

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이 올바르게 정의되도록 URL을 만드는 방법은 오류가 발생합니다. – ModS

관련 문제