Запись/чтение пользовательских настроек в файле app.config

Я пытаюсь читать и записывать в файл app.config пользовательских настроек. Я нашел фрагмент кода для работы с файлом конфигурации. Наконец-то я его скомпилировал и запустил, но, похоже, он ничего не делает с файлом App.config.

Вот код:

Method MainForm1.Button1.Click(sender: System.Object; e: System.EventArgs);
var
config  : System.Configuration.Configuration;
begin
     config:=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
     config.AppSettings.Settings.Add('PreferenceToRemember','value1');
     config.Save(ConfigurationSaveMode.Modified);
     ConfigurationManager.RefreshSection('appSettings');
end;

Он компилируется без ошибок, но я не знаю, делает ли он что-нибудь.

Что-то не так с кодом? Мне нужно иметь возможность писать/читать раздел и писать/читать ключ/значение. Заранее спасибо.

ОБНОВЛЕНИЕ: вместо ConfigurationManager я просто использую Properties.Settings.Default. Однако у меня возникли проблемы с записью в него и чтением из него, хотя программа соответствует без каких-либо ошибок, а код кажется простым.

Как вы читаете и записываете в Properties.Settings.Default из своего кода?


person ThN    schedule 16.08.2011    source источник
comment
См. этот ответ о переполнении стека: stackoverflow.com/questions/1157378/   -  person Greg Finzer    schedule 16.08.2011


Ответы (1)


Может вы не тот файл смотрите? App.config, который у вас есть в вашем решении, будет скопирован в YourProgramFile.exe.config в папке bin/Debug или bin/Release. При запуске вашей программы она обновит этот файл, а не файл app.config в вашем решении.

Тогда, возможно, вам также следует проверить права на запись в папке вашего приложения. Обычно (Win Vista, Win 7) пользователь, выполняющий приложение, не имеет прав на запись в папку Program Files, где должно находиться ваше приложение, поэтому обновление .config, скорее всего, не удастся из-за отсутствия прав на запись. Это еще более справедливо для систем Linux/Unix.

Вы должны попытаться разделить элементы, которые вам нужно написать, и написать дополнительный файл конфигурации в пользовательской папке. Вы можете взять значения по умолчанию из обычной конфигурации приложения для этого изначально и просто обновить файл конфигурации для конкретного пользователя, таким образом, вам не мешают права доступа к файлу, и каждый пользователь может специально обновлять свои настройки.

person Sebastian P.R. Gingter    schedule 17.08.2011
comment
Можете ли вы получить доступ к значению properties.settings с помощью этого кода - MainForm.Top := Properties.Settings.Default.item['MainFormTop']; - person ThN; 18.08.2011
comment
Взгляните на эту статью. Вместо того, чтобы хранить верхний, левый, высоту и ширину, вам лучше сохранить местоположение (включая верхний и левый) и размер (включая высоту и ширину): blogs.msdn.com/b/rprabhu/archive/2005/11/28/497792.aspx - person Sebastian P.R. Gingter; 18.08.2011