none
Settings.settings动态添加的数据能永久保存吗? RRS feed

  • 问题

  • APP在运行期间产生了一些数据,不想用文件保存,相同过Settings.settings或者其他方式进行保存。

    但是尝试了很多次Settings.settings保存的数据在重新启动后就没有了。

    2017年9月16日 1:08

答案


  • Hi oneonce,

    不知道你为什么没有效果。

    我按照你的代码做了测试,并重启机器是OK的。

    StringCollection outs = Properties.Settings.Default.Setting2; if (null == outs) { outs = new StringCollection(); } string messagexxx = ""; foreach (string name in outs) { messagexxx += " " + name; } MessageBox.Show(messagexxx); outs.Insert(0, "filename");//

    Properties.Settings.Default.Setting2 = outs; Properties.Settings.Default.Save();

    注意: 既然使用这种方式存储了用户临时数据,请不要清理电脑。这样可能会清楚掉用户的临时文件,导致恢复到初始值。如果避免不了,那么你可能需要考虑其他方案,比如文件存储,或者数据库存储。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2017年9月19日 9:19
    版主

全部回复

  • 可以永久保存,它是实际保存到文件中。

    应该在设置变量的Scope时设为Application级别。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2017年9月18日 0:35

  • 据我所知:

    你可以在Settings.settings文件中定义配置字段。把作用范围定义为:User则运行时可更改,并保存更改后的值。Applicatiion则运行时不可更改。

    下面的代码是读取配置值然后更改保存。

       string a = Properties.Settings.Default.Setting;
                MessageBox.Show(a);
                Properties.Settings.Default.Setting = "MySetting1";//程序中修改配置变量的数值
                Properties.Settings.Default.Save();//使用Save方法保存更改  不保存,配置文件不修改


    当设置scope为User时他的配置文件存储在
    C:\ Documents and Settings \ username \ Local Settings \ Application Data \ ApplicationName

    您可以在运行时读取/写入它们。

    对于Windows 7或者Windows 10 ,文件夹是
    C:\ Users \ username \ AppData \ Local \ ApplicationName
    要么
    C:\ Users \ username \ AppData \ Roaming \ ApplicationName

    Using Application Settings and User Settings:
    https://docs.microsoft.com/en-us/dotnet/framework/winforms/advanced/using-application-settings-and-user-settings

    Best Regards,

    Yohann Lu



    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年9月18日 5:11
    版主
  • 可以永久保存,它是实际保存到文件中。

    应该在设置变量的Scope时设为Application级别。


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    提示错误:

    error CS0200: Property or indexer 'Settings.Outputs' cannot be assigned to -- it is read only

    代码:

    StringCollection outs = Properties.Settings.Default.Outputs;

    if (null == outs)
    {
        outs = new StringCollection();
    }

    outs.Insert(0, filename);// 每次打开一个新文件,保存其(在最前面)路径 Properties.Settings.Default.Outputs = outs; Properties.Settings.Default.Save();



    • 已编辑 oneonce 2017年9月18日 8:52
    2017年9月18日 8:37
  • 我这边开始是User,但不行:


    每次重新启动就没了

    代码:

    StringCollection outs = Properties.Settings.Default.Outputs;

    if (null == outs)
    {
        outs = new StringCollection();
    }

    outs.Insert(0, filename);// 每次打开一个新文件,保存其(在最前面)路径 Properties.Settings.Default.Outputs = outs; Properties.Settings.Default.Save();



    • 已编辑 oneonce 2017年9月18日 8:51
    2017年9月18日 8:40

  • Hi oneonce,

    不知道你为什么没有效果。

    我按照你的代码做了测试,并重启机器是OK的。

    StringCollection outs = Properties.Settings.Default.Setting2; if (null == outs) { outs = new StringCollection(); } string messagexxx = ""; foreach (string name in outs) { messagexxx += " " + name; } MessageBox.Show(messagexxx); outs.Insert(0, "filename");//

    Properties.Settings.Default.Setting2 = outs; Properties.Settings.Default.Save();

    注意: 既然使用这种方式存储了用户临时数据,请不要清理电脑。这样可能会清楚掉用户的临时文件,导致恢复到初始值。如果避免不了,那么你可能需要考虑其他方案,比如文件存储,或者数据库存储。

    Best Regards,

    Yohann Lu


    MSDN Community Support
    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.


    2017年9月19日 9:19
    版主
  • 那就又可能是我电脑被加密的问题
    2017年9月20日 9:22