のは、あなたが含まれているsettings.xml
ファイルのどこかに持っていると仮定しましょう:
using System.Xml.Linq;
public static class SettingsProvider
{
private const string settingsFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "settings.xml");
private static XDocument settings;
static SettingsProvider()
{
try
{
settings = XDocument.Load(settingsFileName);
}
catch
{
settings = XDocument.Parse("<Settings/>");
}
}
public static string GetValue(string section, string key, string defaultValue)
{
XElement settingElement = GetSettingElement(section, key);
return settingElement == null ? defaultValue : settingElement.Value;
}
public static void SetValue(string section, string key, string value)
{
XElement settingElement = GetSettingElement(section, key, true);
settingElement.Value = value;
settings.Save(settingsFileName);
}
private static XElement GetSettingElement(string section, string key, bool createIfNotExist = false)
{
XElement sectionElement =
settings
.Root
.Elements(section)
.FirstOrDefault();
if (sectionElement == null)
{
if (createIfNotExist)
{
sectionElement = new XElement(section);
settings.Root.Add(sectionElement);
}
else
{
return null;
}
}
XElement settingElement =
sectionElement
.Elements(key)
.FirstOrDefault();
if (settingElement == null)
{
if (createIfNotExist)
{
settingElement = new XElement(key);
sectionElement.Add(settingElement);
}
}
return settingElement;
}
public static void RemoveSetting(string section, string key)
{
XElement settingElement = GetSettingElement(section, key);
if (settingElement == null)
{
return;
}
XElement sectionElement = settingElement.Parent;
settingElement.Remove();
if (sectionElement.IsEmpty)
{
sectionElement.Remove();
}
settings.Save(settingsFileName);
}
}
あなたはこのようにそれを使用することができます:
string section1Key1 = SettingsProvider.GetValue("Section1", "Key1", "default");
SettingsProvider.SetValue("Section1", "Key1", "OtherValue");
SettingsProvider.SetValue("Section1", "Key2", "Value2");
SettingsProvider.SetValue("Section2", "Key1", "Value3");
SettingsProvider.RemoveSetting("Section2", "Key1");
SettingsProvider.RemoveSetting("Section1", "Key2");
<?xml version="1.0" encoding="utf-8" ?>
<Settings>
<Section1>
<Key1>Value1</Key1>
<Key2>Value2</Key2>
</Section1>
<Section2>
<Key1>Value3</Key1>
<Key2>Value4</Key2>
<KeyX>Value5</KeyX>
</Section2>
</Settings>
は、その後、あなたがこのようなSettingsProvider
クラスを持つことができますが
これは優れていました。私はそれを有効にするためだけにパスを変更し、ファイルが存在しない場合は空のルート要素を作成するための初期化メソッドを追加しなければなりませんでした。私の編集提案を参照してください。 Köszönömszépen;-) – ib11
編集提案を受け入れました。しかし、Initialize()メソッドを静的ctorに置き換えて、 'SettingsProvider'を使用する前に初期化を実行するようにしました。 Igazánnincs mit、énköszönöm。 :) – Gabor
'GetSettingElement'が常に最初に呼び出され、最初に' Initialize() 'メソッド呼び出しがあったので、これは最初に実行されました。しかし、これはよりクリーンです。私はもうもう一回編集して、もはや必要ではない呼び出しを削除しました。そして、メソッドをコンストラクタに変更してから有効ではありません。ハット・テッツィーク・ア・ケデーズ、アズ・トゥ・フェルフォンツァードド;-)ケツィエ・メイ・エイサー、ソケ・セグイテット。 – ib11