『「アプリケーション構成ファイル」を使用して設定を読み込む』ではアプリケーション構成ファイルの簡単な利用法を、「外部ファイルにコントロールのプロパティを格納する」では動的プロパティの簡単な利用法を紹介しました。ここでは「アプリケーション構成ファイル」に保存されている値の変更、追加、削除等をプログラムで行う方法を紹介します。
ただし、本来アプリケーション構成ファイルは読み取り専用の設定を保存するために使用するものですので、このようなアプリケーション構成ファイルの編集はその目的をよく考えて行ってください。通常の設定であれば、「アプリケーションの設定を保存する」のような方法を使ってください。
ここで紹介している例では、「アプリケーション構成ファイル」(Project1.exe.config)の<configuration><appSettings>に「Application Description」を追加し、「Application Name」の値を変更し、「Comment」を削除しています。binフォルダの構成ファイルを編集しているため、プロジェクトの構成ファイルは変わりません。
さらに、アプリケーション構成ファイルを編集してもその結果はすぐに反映されず、アプリケーションを起動しなおす必要があることに注意してください。
.NET FrameworkでXMLを編集する方法は色々ありますが、ここではXmlDocumentクラスを使う方法を紹介します。
'構成ファイルのパスを取得 Dim asm as System.Reflection.Assembly = _ System.Reflection.Assembly.GetExecutingAssembly() Dim appConfigPath As String 'ファイル名は適当に変更してください appConfigPath = System.IO.Path.GetDirectoryName(asm.Location) + _ "\Project1.exe.config" '構成ファイルをXML DOMに読み込む Dim doc As System.Xml.XmlDocument = New System.Xml.XmlDocument() doc.Load(appConfigPath) Dim node As System.Xml.XmlNode = doc("configuration")("appSettings") '-------------------------------------------------------------------- '構成ファイルに新しい値 '("key"="Application Description","value"="MyApplicationDescription") 'を追加する '-------------------------------------------------------------------- '新しいElement("add")の作成 Dim newNode As System.Xml.XmlElement = doc.CreateElement("add") 'Attributeを作成し、追加する newNode.SetAttribute("key", "Application Description") newNode.SetAttribute("value", "MyApplicationDescription") node.AppendChild(newNode) '-------------------------------------------------------------------- '構成ファイルの"key"="Application Name"の値を '"value"="MyNewApplication"に変更する '-------------------------------------------------------------------- 'ノードを探す Dim n As System.Xml.XmlNode For Each n In doc("configuration")("appSettings") If n.Name = "add" Then '"key"="Application Name"のとき、"value"を変更する If n.Attributes.GetNamedItem("key").Value = "Application Name" Then n.Attributes.GetNamedItem("value").Value = "MyNewApplication" End If End If Next '-------------------------------------------------------------------- '構成ファイルの"key"="Comment"を削除する '-------------------------------------------------------------------- 'ノードを探す Dim n2 As System.Xml.XmlNode For Each n2 In doc("configuration")("appSettings") If n2.Name = "add" Then '"key"="Comment"のとき、削除する If n2.Attributes.GetNamedItem("key").Value = "Comment" Then doc("configuration")("appSettings").RemoveChild(n2) End If End If Next '変更された構成ファイルを保存する doc.Save(appConfigPath)
//構成ファイルのパスを取得 System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); string appConfigPath; //ファイル名は適当に変更してください appConfigPath = System.IO.Path.GetDirectoryName(asm.Location) + @"\Project1.exe.config"; //構成ファイルをXML DOMに読み込む System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load(appConfigPath); System.Xml.XmlNode node = doc["configuration"]["appSettings"]; //------------------------------------------------------------------- //構成ファイルに新しい値 //("key"="Application Description","value"="MyApplicationDescription") //を追加する //------------------------------------------------------------------- //新しいElement("add")の作成 System.Xml.XmlElement newNode = doc.CreateElement("add"); //Attributeを作成し、追加する newNode.SetAttribute("key", "Application Description"); newNode.SetAttribute("value", "MyApplicationDescription"); node.AppendChild(newNode); //------------------------------------------------------------------- //構成ファイルの"key"="Application Name"の値を //"value"="MyNewApplication"に変更する //------------------------------------------------------------------- //ノードを探す foreach (System.Xml.XmlNode n in doc["configuration"]["appSettings"]) { if (n.Name == "add") { //"key"="Application Name"のとき、"value"を変更する if (n.Attributes.GetNamedItem("key").Value == "Application Name") n.Attributes.GetNamedItem("value").Value = "MyNewApplication"; } } //------------------------------------------------------------------- //構成ファイルの"key"="Comment"を削除する //------------------------------------------------------------------- //ノードを探す foreach (System.Xml.XmlNode n in doc["configuration"]["appSettings"]) { if (n.Name == "add") { //"key"="Comment"のとき、削除する if (n.Attributes.GetNamedItem("key").Value == "Comment") doc["configuration"]["appSettings"].RemoveChild(n); } } //変更された構成ファイルを保存する doc.Save(appConfigPath);
.NET Framework 2.0以降では、ConfigurationクラスのAppSettingsプロパティを使うことにより、構成ファイルの設定を簡単に扱うことができます。Configurationクラスを使うには、System.Configuration.dllが参照設定に追加されている必要があります。
Configurationクラスを使った例を以下に示します。
'Configurationの作成 'ConfigurationUserLevel.Noneでアプリケーション構成ファイルを開く Dim config As System.Configuration.Configuration = _ System.Configuration.ConfigurationManager.OpenExeConfiguration( _ System.Configuration.ConfigurationUserLevel.None) '-------------------------------------------------------------------- '構成ファイルに新しい値 '("key"="Application Description","value"="MyApplicationDescription") 'を追加する '-------------------------------------------------------------------- config.AppSettings.Settings.Add( _ "Application Description", "MyApplicationDescription") '-------------------------------------------------------------------- '構成ファイルの"key"="Comment"を削除する '-------------------------------------------------------------------- '"Comment"が見つからなくても例外はスローされない config.AppSettings.Settings.Remove("Comment") '-------------------------------------------------------------------- '構成ファイルの"key"="Application Name"の値を '"value"="MyNewApplication"に変更する '-------------------------------------------------------------------- config.AppSettings.Settings("Application Name").Value = "MyNewApplication" '保存する config.Save()
//Configurationの作成 //ConfigurationUserLevel.Noneでアプリケーション構成ファイルを開く System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration( System.Configuration.ConfigurationUserLevel.None); //------------------------------------------------------------------- //構成ファイルに新しい値 //("key"="Application Description","value"="MyApplicationDescription") //を追加する //------------------------------------------------------------------- config.AppSettings.Settings.Add( "Application Description", "MyApplicationDescription"); //------------------------------------------------------------------- //構成ファイルの"key"="Comment"を削除する //------------------------------------------------------------------- //"Comment"が見つからなくても例外はスローされない config.AppSettings.Settings.Remove("Comment"); //------------------------------------------------------------------- //構成ファイルの"key"="Application Name"の値を //"value"="MyNewApplication"に変更する //------------------------------------------------------------------- config.AppSettings.Settings["Application Name"].Value = "MyNewApplication"; //保存する config.Save();