Записать значения в файл app.config
Может кто-нибудь, пожалуйста, помогите мне, как я могу установить / сохранить значения в файле app.config с помощью C#, это вообще возможно?
11 ответов
Если вы используете App.Config для хранения значений в <app Key="" Value="" />
или раздел CustomSections использует класс ConfigurationManager, иначе используйте класс XMLDocument.
Вы можете использовать код, размещенный на CodeProject
Попробуйте следующий код:
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings.Add("YourKey", "YourValue");
config.Save(ConfigurationSaveMode.Minimal);
У меня это сработало:-)
В Framework 4.5 часть ConfigurationSanager AppSettings.Settings["key"] доступна только для чтения, поэтому мне пришлось сначала удалить ключ, а затем добавить его еще раз, используя следующее:
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings.Remove("MySetting");
config.AppSettings.Settings.Add("MySetting", "some value");
config.Save(ConfigurationSaveMode.Modified);
Не волнуйтесь, вы не получите исключения, если попытаетесь удалить ключ, который не существует.
Этот пост дает хороший совет
private static string GetSetting(string key)
{
return ConfigurationManager.AppSettings[key];
}
private static void SetSetting(string key, string value)
{
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
configuration.AppSettings.Settings[key].Value = value;
configuration.Save(ConfigurationSaveMode.Full, true);
ConfigurationManager.RefreshSection("appSettings");
}
Как уже упоминалось, вы можете сделать это с ConfigurationManager.AppSettings.Settings
, Но: используя Settings[key] = value
не будет работать, если ключ не существует.
С помощью Settings.Add(key, value)
, если ключ уже существует, он присоединит новое значение к его значениям, разделенным запятой, что-то вроде<add key="myKey" value="value1, value2, value3" />
Чтобы избежать этих неожиданных результатов, вы должны обработать два сценария
- Если запись с данным ключом существует? затем обновите его значение
- если запись с данным ключом не существует? затем создайте новую запись (ключ, значение)
Код
public static void Set(string key, string value)
{
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var entry = config.AppSettings.Settings[key];
if (entry == null)
config.AppSettings.Settings.Add(key, value);
else
config.AppSettings.Settings[key].Value = value;
config.Save(ConfigurationSaveMode.Modified);
}
Для получения дополнительной информации о чеке entry == null
, проверьте этот пост.
Надеюсь, это кому-нибудь поможет.
Для консольного приложения.NET 4.0 ни один из них не работал для меня. Поэтому я использовал следующее ниже, и это сработало:
private static void UpdateSetting(string key, string value)
{
Configuration configuration = ConfigurationManager.
OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
configuration.AppSettings.Settings[key].Value = value;
configuration.Save();
ConfigurationManager.RefreshSection("appSettings");
}
string filePath = System.IO.Path.GetFullPath("settings.app.config");
var map = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
try
{
// Open App.Config of executable
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
// Add an Application Setting if not exist
config.AppSettings.Settings.Add("key1", "value1");
config.AppSettings.Settings.Add("key2", "value2");
// Save the changes in App.config file.
config.Save(ConfigurationSaveMode.Modified);
// Force a reload of a changed section.
ConfigurationManager.RefreshSection("appSettings");
}
catch (ConfigurationErrorsException ex)
{
if (ex.BareMessage == "Root element is missing.")
{
File.Delete(filePath);
return;
}
MessageBox.Show(ex.Message);
}
Попробуйте следующее:
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings[key].Value = value;
config.Save();
ConfigurationManager.RefreshSection("appSettings");
Да, вы можете - см. ConfigurationManager
Класс ConfigurationManager включает члены, позволяющие выполнять следующие задачи:
- Чтение и запись файлов конфигурации в целом.
Научитесь пользоваться документами, они должны стать вашим первым портом захода на такой вопрос.
//if you want change
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings[key].Value = value;
//if you want add
Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath);
config.AppSettings.Settings.Add("key", value);
Я боролся с этим некоторое время и, наконец, понял это самостоятельно. В то время я не нашел никакой помощи, но хотел поделиться своим подходом. Я делал это несколько раз и использовал метод, отличный от того, что указано выше. Не уверен, насколько это надежно, но это сработало для меня.
Допустим, у вас есть текстовое поле с именем «txtName», кнопка с именем «btnSave», и вы хотите сохранить имя, чтобы при следующем запуске программы введенное вами имя отображалось в этом текстовом поле.
- Перейдите в «Проект»> «Свойства»> «Настройки» и создайте настройку —
- имя = "Имя"
- тип = "строка"
- область = "пользователь"
- значение, которое вы можете оставить пустым.
Сохраните файл настроек.
- Перейдите в свою форму, где есть текстовое поле и кнопка. Дважды щелкните кнопку и введите этот код;
//This tells your program to save the value you have to the properties file (app.config);
//"Name" here is the name you used in your settings file above.
Properties.Settings.Default.Name = txtName.txt;
//This tells your program to make these settings permanent, otherwise they are only
//saved for the current session
Properties.Settings.Default.Save();
- Перейдите к своей функции form_load и добавьте это туда;
//This tells your program to load the setting you saved above to the textbox
txtName.txt = Properties.Settings.Default.Name;
- Отладьте свое приложение, и вы должны увидеть имя, которое вы ввели.
- Проверьте каталог отладки вашего приложения, и вы должны увидеть файл .config с именем вашей программы. Откройте его в текстовом редакторе, и вы увидите свои настройки.
Заметки -
- «Имя» относится к фактическому названию созданной вами настройки.
- Ваша программа позаботится о создании фактического XML-файла, вам не нужно об этом беспокоиться.