2013-04-07 2 views
2

.NET C# 응용 프로그램에서 사용자 설정 저장을 구현 중이며 하나의 설정 만 저장하고 싶습니다. 그것은 그렇게 할 수 있는가, 또는 표준으로 한 번에 모든 사용자 설정을 저장하는 내 유일한 옵션이다 : 나는 NINI을 사용하고 Environment.SpecialFolder.ApplicationData 같은 곳에서 XML 구성 파일을 저장하는 것을 선호C#에서 단일 사용자 설정 저장

Properties.Settings.Default.Save(); 
+0

당신은 사용자 편집이 Properties.Settings.Default''가 아닌 다른 하나가 될 수있는 개체가 수 있으며, 'Save()'를 호출하기 전에 객체에서 저장하고자하는 설정 만 그 객체로 옮기십시오. – millimoose

답변

2

.

.NET 설정 항목만큼 쉽지 않을 수도 있습니다. 나는 어쨌든 그들을 사용하지 못했습니다.

예를 들어, 아래 클래스가 있습니다. 내가 필요로하는 것은 그것이 가져 오거나 속성을 설정해야 할 일, 그들은 자동/저장로드하고 있습니다 :

using Nini.Config; 

public class DbConfig : PropertyNotifierBase { 
    private static readonly string PROGRAM_NAME = "programname"; 
    private static readonly string CONFIG_NAME = "Database"; 

    private static DbConfig _instance = new DbConfig(); 

    public static DbConfig Instance { get { return (_instance); } } 

    private DbConfig() { 
     SetupPaths(); 
     Source = new XmlConfigSource(FullConfigFilename); 
     Source.AutoSave = true; 
     CreateSectionsIfNeeded(); 
    } 

    private void CreateSectionsIfNeeded() { 
     if (Source.Configs["Database"] == null) 
      Source.AddConfig("Database"); 
    } 

    private void SetupPaths() { 
     ConfigPath = DetermineConfigPath(); 
     ConfigFilename = String.Format("{0}.xml", CONFIG_NAME); 
     Directory.CreateDirectory(ConfigPath); 

     // Create an empty configuration file if it isn't there. 
     if (!File.Exists(FullConfigFilename)) 
      File.WriteAllText(FullConfigFilename, "<Nini>\n</Nini>\n"); 
    } 

    private IConfigSource Source { get; set; } 

    public String ConfigPath { get; private set; } 

    public String ConfigFilename { get; private set; } 

    public String FullConfigFilename { get { return (Path.Combine(ConfigPath, ConfigFilename)); } } 

    public String SqlServerInstance { 
     get { return (Source.Configs["Database"].GetString("SqlServerInstance", @"somedefaultconnection")); } 
     set { Source.Configs["Database"].Set("SqlServerInstance", value); NotifyPropertyChanged("SqlServerInstance"); } 
    } 

    public String SqlServerDatabase { 
     get { return (Source.Configs["Database"].GetString("SqlServerDatabase", "somedatabasename")); } 
     set { Source.Configs["Database"].Set("SqlServerDatabase", value); NotifyPropertyChanged("SqlServerDatabase"); } 
    } 

    public String SqlServerUsername { 
     get { return (Source.Configs["Database"].GetString("SqlServerUsername", "someusername")); } 
     set { Source.Configs["Database"].Set("SqlServerUsername", value); NotifyPropertyChanged("SqlServerUsername"); } 
    } 

    public String SqlServerPassword { 
     get { return (Source.Configs["Database"].GetString("SqlServerPassword", "somepassword")); } 
     set { Source.Configs["Database"].Set("SqlServerPassword", value); NotifyPropertyChanged("SqlServerPassword"); } 
    } 

    private string DetermineConfigPath() { 
     String filename = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
     filename += Path.DirectorySeparatorChar + PROGRAM_NAME; 
     return (filename); 
    } 
} 
+0

스티브, 어떻게 할 수 있습니까? 나는 초보자 다. – Jeagr

+1

방금 ​​편집을하고 내가 사용하는 수업을 게시했습니다. 그건 매우 쉬워요. NINI DLL에 대한 참조와 거기에있는 약간의 코드를 포함하여 필요한 모든 것. – Steve

+1

그건 그렇고, 그 클래스에서 나는 데이터베이스 연결에 대한 연결 정보를 저장하고 암호는 일반 텍스트로 저장됩니다. 그다지 안전하지는 않지만 내 용도에는 저에게 관심사가 아닙니다. – Steve