2012-07-13 2 views
0

현재 구성 설정을 저장하기 위해 adhoc XML 파일을 사용하고 있으며 작동하지만 작동이 필요하지는 않습니다.구성 파일 설정 - 입력 필요

이 간다 이런 식으로 뭔가 :

<XmlDoc> 

    <DefaultSettings> 
     <ExitProgramMessage>Y</ExitProgramMessage> 
    <DefaultSettings> 

    <Company> 
     <ExitProgramMessage>N</ExitProgramMessage> 
    <Company> 

    <Workstation> 
     <ExitProgramMessage>N</ExitProgramMessage> 
    </Workstation> 

    <User> 
     <ExitProgramMessage>Y</ExitProgramMessage> 
    <User> 

<XmlDoc> 

코드를 작성하는 방법은 DefaultSettings 먼저 읽어 즉, DefaultSettings을 덮어합니다 (DefaultSettings을 덮어 씁니다) 다음 기업, 다음 워크 스테이션 설정 (또는 회사 설정), 워크 스테이션 다음 사용자 ... 공백을 제외하고 최종 읽기 승리. 그들은 들판을 청소하지 않습니다. 위의 예에서 ExitProgramMessage는 Y가됩니다.

몇 가지 문제가 있습니다. 그들은

  • 을 하드 코딩되어 있기 때문에

    1. 난 쉽게 내가 파일을 수동으로 항상 문제가 발생하는 편집해야 의미 표준 XML 형식이 아닌 이후 수동으로 각 노드를 읽을 필요 이상의 레벨을 추가 할 수 없습니다.

    사용하기가 쉽지 않으며 직관적이지 않습니다.

    그렇다면이 설정을 업데이트하기 위해 화면을 만들 수있는 곳에서 어떻게 구현해야합니까?

    xml은 올바른 방법입니까? 이걸로 다른 길로 가야할까요? 우리는 아직 데이터베이스에 대한 옵션이 없으며 플랫 파일 만 제공합니다.

    또한 이러한 설정은 네트워크 사용자가 액세스하는 공유 드라이브가있는 서버에 있습니다. 따라서 레지스트리에 저장된 설정이나 사용자에게 특정한 설정이 될 수 없습니다.

    모든 아이디어는 크게 감사하겠습니다.

    감사합니다.

  • 답변

    1

    시나리오에 대한 나의 제안은 당신이

    Settings.Properties를 사용하여 아주 좋은 예입니다

    당신이 응용 프로그램의 상태를 저장할 수 있습니다 그들에 어떤 종류의 haev 런타임시를 업데이트 할 수 있습니다 Settings.Properties을 조사하는 것 자세한 내용은 그들

    페이지의 링크

    http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

    http://msdn.microsoft.com/en-us/library/bb397755.aspx

    0

    두 클래스로 쉽게 처리됩니다. 예 : 값을 기록하려면

    Settings settings = new Settings(file); 
    var company = settings["Company"].ExitProgramMessage; 
    

    :

    가 값을 읽을 수는 다음과 같이

    using(Settings settings = new Settings(file)) 
    { 
        settings["Workstation"].ExitProgramMessage = "Y"; 
    } 
    

    클래스는 :

    public class Settings : IDisposable 
    { 
        XElement self; 
        FileInfo file; 
        public Settings(FileInfo file) 
        { 
         if (file.Exists) 
          self = XElement.Load(file.FullName); 
         else 
          self = new XElement("XmlDoc"); 
         this.file = file; 
        } 
    
        public Setting this[string name] 
        { 
         get 
         { 
          XElement x = self.Element(name); 
          if (null == x) 
           self.Add(x = new XElement(name)); 
          return new Setting(x, name); 
         } 
        } 
    
        public void Dispose() 
        { 
         self.Save(file.FullName); 
        } 
    } 
    
    public class Setting 
    { 
        XElement self; 
        string name; 
        public Setting(XElement xsetting, string name) 
        { 
         self = xsetting; 
         this.name = name; 
        } 
    
        public string ExitProgramMessage 
        { 
         get 
         { 
          XElement x = self.Element("ExitProgramMessage"); 
          if (null == x) 
           return "Unknown"; // default value? 
          return (string)x; 
         } 
         set 
         { 
          XElement x = self.Element("ExitProgramMessage"); 
          if (null == x) 
           self.Add(new XElement("ExitProgramMessage", value)); 
          else 
           x.Value = value; 
         } 
        } 
    
        public string Name { get { return name; } } 
    }