2013-04-07 2 views
2

Я работаю над реализацией сохранения пользовательских настроек в приложении .NET C#, и в одном случае я бы хотел сохранить только один параметр. Можно ли сделать это, или это мой единственный вариант для сохранения всех пользовательских настроек одновременно со стандартом:Сохранение одной пользовательской настройки в C#

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

Вы можете иметь объект, который редактирует пользователь будет другой один, чем 'Properties.Settings.Default', и только передайте настройку, которую вы хотите сохранить из своего объекта, в этот, прежде чем вызывать 'Save()' – millimoose

ответ

2

Я предпочитаю использовать NINI и сохраните файл конфигурации XML в где-нибудь, как Environment.SpecialFolder.ApplicationData.

Возможно, это не так просто, как в настройках .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

Я только что сделал редактирование и разместил класс, который я использую. Это очень легко. Включая ссылку на DLL NINI и немного кода, там все, что нужно. – Steve

+1

Кстати, в этом классе я сохраняю информацию о соединении для подключения к базе данных, а пароль сохраняется в открытом виде. Не очень безопасно, но для моего приложения, а не для меня. – Steve

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