在App.Config中更新计数器

时间:2018-07-30 10:55:40

标签: c# config app-config

我正在使用C#创建一个表单应用程序。此应用程序应创建某些文件,并且这些文件需要具有递增编号。因此,我认为我可以将Counter存储在app.config中,并在每次创建文件时将其递增。

我曾经写过这段代码:

System.Configuration.Configuration _Config = null;
    public Form1()
    {
        InitializeComponent();
        _Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    }

    private void btnNew_Click(object sender, EventArgs e)
    {
        int lCount;
        if (int.TryParse(ConfigurationManager.AppSettings["count"], out lCount))
        {
            _Config.AppSettings.Settings["count"].Value = lCount++.ToString();
            _Config.Save(ConfigurationSaveMode.Modified);

            MessageBox.Show(ConfigurationManager.AppSettings["count"].ToString());
        }
        else
        {
            throw new Exception("Count in Config file is no int");
        }
    }

这不是更新值。我是否需要重新加载配置,还是将计数器值存储在app.config中没有任何意义?

谢谢

1 个答案:

答案 0 :(得分:0)

您需要在lCount++;之前使用toString();,否则count总是保存相同的值,您可以在保存新数据时尝试添加ConfigurationManager.RefreshSection方法。

这是您问题的样本。

int i = 0;
Console.WriteLine("i++:" + i++.ToString()); // will get 0

i = 0;
Console.WriteLine("(++i):"+(++i).ToString()); // will get 1

c# online sample

或者您可以使用(++lCount).ToString()代替lCount++.ToString()

 _Config.AppSettings.Settings["count"].Value = (++lCount).ToString();

代码看起来像这样。

System.Configuration.Configuration _Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
int lCount;
if (int.TryParse(ConfigurationManager.AppSettings["count"], out lCount))
{
     lCount++;
    _Config.AppSettings.Settings["count"].Value = lCount.ToString();
    _Config.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection(_Config.AppSettings.SectionInformation.Name);
}

注意:

我建议您将计数器保存在DB中而不是App.config中。