Как использовать доступные для чтения / записи локальные настройки XML?
Я нашел что-то похожее на то, что мне нужно, здесь: http://www.codeproject.com/KB/cs/PropertiesSettings.aspx Но это не совсем так для меня. Пользовательские настройки хранятся в каком-то отдаленном месте, например C:\documents and settings\[username]\local settings\application data\[your application]
, но у меня нет доступа к этим папкам, и я не могу скопировать файл настроек с одного компьютера на другой или удалить файл в целом. Кроме того, было бы очень удобно иметь XML-файл настроек прямо рядом с приложением и копировать / отправлять оба. Это используется для демонстрационного программного обеспечения (которое является законным типом задачи кодирования) и будет использоваться нетехническими людьми на местах. Мне нужно сделать это быстро, поэтому мне нужно повторно использовать существующую библиотеку, а не писать свою собственную. Мне нужно, чтобы он был легким в использовании и переносимым. Последнее, что я хочу, - это позвонить в полночь, чтобы сказать, что настройки не сохраняются при редактировании через диалог настроек, который я построю.
Итак, пользовательские настройки хранятся, бог знает где, а настройки приложения доступны только для чтения (не ходи). Есть ли что-нибудь еще, что я могу сделать? Я думаю, что файл app.config имеет несколько целей, и я думаю, что однажды увидел, что он используется так, как я хочу, я просто не могу найти ссылку.
Дайте мне знать, если что-то не понятно.
1 ответ
Вы можете создать класс, содержащий ваши настройки, и затем сериализовать его в XML:
public class Settings
{
public string Setting1 { get; set; }
public int Setting2 { get; set; }
}
static void SaveSettings(Settings settings)
{
var serializer = new XmlSerializer(typeof(Settings));
using (var stream = File.OpenWrite(SettingsFilePath))
{
serializer.Serialize(stream, settings);
}
}
static Settings LoadSettings()
{
if (!File.Exists(SettingsFilePath))
return new Settings();
var serializer = new XmlSerializer(typeof(Settings));
using (var stream = File.OpenRead(SettingsFilePath))
{
return (Settings)serializer.Deserialize(stream);
}
}