none
app.config 新增appSettings RRS feed

  • 問題

  • 請教各位前輩:

    要如何才能動態新增appSettings下的資料?

    預計存入多筆使用者資訊,登入時驗證用。

     

    且程式Build過後

    執行.EXE檔,建立新的使用者資訊

    會存入app.config內,接著執行登入,卻會找不到該使用者資料

    且會直接將之前已存在的使用者資訊覆寫過去

     

     

    private void butConfig_Click(object sender, EventArgs e)
            {
                XmlDocument doc = new XmlDocument();
                //获得配置文件的全路径
                string strFileName = @"D:\hash\hash\App.config

                doc.Load(strFileName);
                //找出名称为“add”的所有元素
                XmlNodeList nodes = doc.GetElementsByTagName("add");
                for (int i = 0; i < nodes.Count; i++)
                {
                    //获得将当前元素的key属性
                    XmlAttribute att = nodesIdea.Attributes["key"];
                    //根据元素的第一个属性来判断当前的元素是不是目标元素
                    switch (att.Value)
                    {
                        case "UserName":
                            att = nodesIdea.Attributes["value"];
                            att.Value = txtUserName.Text;
                            break;
                        case "Address":
                            att = nodesIdea.Attributes["value"];
                            att.Value = txtAddress.Text;
                            break;
                        case "Mail":
                            att = nodesIdea.Attributes["value"];
                            att.Value = txtMail.Text;
                            break;
                        case "Pws":
                            att = nodesIdea.Attributes["value"];
                            att.Value = txtPws.Text;
                            break;
                    }
                }
                //保存上面的修改
                doc.Save(strFileName);

            }

    2007年11月15日 上午 08:05

解答

  • 用 XmlDocument 去編輯可能會失效,畢竟 app.config 又不是說改就改的東西 ...

     

    你要用 System.Configuration 提供的方法去改:

     

    程式碼區塊

    // Show how to use OpenExeConfiguration(ConfigurationUserLevel)
    // and RefreshSection.
    static void UpdateAppSettings()
    {
        // Get the configuration file.
        System.Configuration.Configuration config =
          ConfigurationManager.OpenExeConfiguration(
          ConfigurationUserLevel.None);

        // Add an entry to appSettings.
        int appStgCnt =
            ConfigurationManager.AppSettings.Count;
        string newKey = "NewKey" + appStgCnt.ToString();

        string newValue = DateTime.Now.ToLongDateString() + " " +
                       DateTime.Now.ToLongTimeString();

        config.AppSettings.Settings.Add(newKey, newValue);

        // Save the configuration file.
        config.Save(ConfigurationSaveMode.Modified);

        // Force a reload of the changed section.
        ConfigurationManager.RefreshSection("appSettings");

    }

     

     

     

     

    2007年11月15日 上午 10:36
    版主

所有回覆

  • 應該沒有人這樣做的吧...??

     

    編譯後... app.config 會產生 xxx.exe.config...真正作用的是 xxx.exe.config...

    所以一切設定都應該是xxx.exe.config 為主...

     

    如果 xxx.exe 去修改 app.config...

    也要重新編譯過後...app.config 才會產生新的 xxx.exe.config 來作用...

     

    2007年11月15日 上午 08:26
  • 如果改為D:\hash\hash\bin\Debug\app.exe.config

    編譯時不會出錯

    但執行新增時會出現〞找不到檔案〞

    所以才用app.config

    2007年11月15日 上午 08:34
  • xxx.exe.config = 你的程式名稱加上 .config

    你切換到輸出的目錄自己觀察就知道了...

     

    2007年11月15日 上午 08:51
  •  

    謝謝  ^^"

    是我沒注意看,一直以為副檔名是.exe.config

     

    但新增後,直接利用該資訊登入

    會出現無此帳號

     

    確定app.exe.config有寫入

     

            private void butLogin_Click(object sender, EventArgs e)
            {
                #region config

                AppSettingsReader asreader = new AppSettingsReader();
                object ob1, ob2;
                ob1 = asreader.GetValue("UserName", typeof(string));
                ob2 = asreader.GetValue("Pws", typeof(string));

                if (txtName.Text == ob1.ToString())
                {
                    if (txtPws.Text == ob2.ToString())
                    {
                        Form2 f = new Form2();
                        f.Show();
                    }
                    else
                    {
                        MessageBox.Show("密碼錯誤!!");
                    }
                }
                else
                {
                    MessageBox.Show("無此帳號!!");
                }

     

    2007年11月15日 上午 09:00
  • (1) 先檢查有沒有 xxx.exe.config 有沒有正寫入...

     

    (2) 檢查 AppSettingsReader 有沒有抓到值

     

     

     

    2007年11月15日 上午 09:16
  • 確定已寫入完成,因有秀完成訊息。

     

    AppSettingsReader讀到的值為上一次的

    但開啟exe.config,其內的值為剛寫入的

     

    如果將應用程式關閉

    再開啟

    就可以以剛新增的資訊登入

    2007年11月15日 上午 09:28
  • 用 XmlDocument 去編輯可能會失效,畢竟 app.config 又不是說改就改的東西 ...

     

    你要用 System.Configuration 提供的方法去改:

     

    程式碼區塊

    // Show how to use OpenExeConfiguration(ConfigurationUserLevel)
    // and RefreshSection.
    static void UpdateAppSettings()
    {
        // Get the configuration file.
        System.Configuration.Configuration config =
          ConfigurationManager.OpenExeConfiguration(
          ConfigurationUserLevel.None);

        // Add an entry to appSettings.
        int appStgCnt =
            ConfigurationManager.AppSettings.Count;
        string newKey = "NewKey" + appStgCnt.ToString();

        string newValue = DateTime.Now.ToLongDateString() + " " +
                       DateTime.Now.ToLongTimeString();

        config.AppSettings.Settings.Add(newKey, newValue);

        // Save the configuration file.
        config.Save(ConfigurationSaveMode.Modified);

        // Force a reload of the changed section.
        ConfigurationManager.RefreshSection("appSettings");

    }

     

     

     

     

    2007年11月15日 上午 10:36
    版主