zoukankan      html  css  js  c++  java
  • C# winform或控制台Properties.Settings.Default的使用及存储位置

    C# winform或控制台Properties.Settings.Default的使用及存储位置

    作者的程序 是MmPS.ClientForm.exe,使用Properties.Settings.Default.Save()以后,

    会保存成MmPS.ClientForm.exe_Url_cdmg52oge3gd2ky3amjdokghzwm4suw5,

    在该文件名下有一个user文件,如下箭头所指即是

     

    Settings里的属性根据范围分为两种 “用户”和“应用程序”

    范围为“应用程序”的属性,读取都是从APP.CONFIG里获取,设置也可以通过手工修改App.config改变,但是在程序中无法对其进行赋值,只能读取。

    而范围为“用户”的属性 Settings 在第一次运行时会读取App.config里的初始值

    但是一旦调用Save方法后,Settings里“用户”范围的属性就会保存在系统里面,类似WebForm里的Cookies一样

    从此以后,读取都会从系统里保存的值里读取,手工修改App.config里的“用户”范围的属性不会影响到这些属性,但是在调用Reset方法时会从新从App.config里获取“用户”范围的属性写入到系统中。

                也就是说,settings里“用户”范围的属性总共有3个地方存储。

    1、app.config配置文件-----程序第一次运行,之前程序未调用save(),在系统中找不到就会从这里获取

    2、操作系统--------当settings调用save()保存后。

    3、内存----程序启动后,实例化settings对象,该实例在创建的时候从系统(如果系统中没有就如前面提到的从配置文件中获取)读取在内存中。

    另外app.config,系统,内存这3个位置之间值的关系可以使用以下方法互相影响。

    new() 构造函数,从系统或配置文件中读取属性值 ,“用户”属性先检查系统,如果没有值,再冲配置文件中读取,“应用程序”属性都从配置文件读取。

    Save:将settings“用户”范围的属性写入到系统中, settings实例后,在程序中被赋予新值,如果想保存这些值以便在程序下一次运行时使用,就可以调用Save保存

    例:

    Properties.Settings.Default.Save();       

    Reload:从系统或App.config中读取已保存的值刷新当前内存里“用户”范围的属性。先检查系统,当系统中没有保存时再从app.config中获取

    例:

    Properties.Settings.Default.Reload();

    Reset:清空系统中保存的settings,并且从app.config中刷新内存里“用户”范围的属性。
    例:

    Properties.Settings.Default.Reset();

    Upgrade:当程序安装多个时,从最新的一个程序所保存在系统的值读取出来并刷新内存里“用户”范围的属性。
    例:

    Properties.Settings.Default.Upgrade();

    我在settings.settings里面添加一个设定
    名称:path 
    类型:string 
    user 
    值:notuse
    然后程序里面通过以下2句保存。
    Properties.Settings.Default.path="D:Test";
    Properties.Settings.Default.Save();
    虽然之后通过调用path,发现它的值是”D:/Test“,但是我在app.config里面发现它的值还是”notuse“。

    之后清空bindebug目录以及obj目录,重新调试发现path还是”D:Test“。
    莫非这个设置保存在其他地方?

    在系统盘appdata下面,不同操作系统有一定差别,比如我的server03系统,某一个程序的setting放在下面:
    C:Documents and SettingsAdministratorApplication Data uizhiWindowsApplication1.exe_Url_0l2pjhmtjiyqprtjqg2f1bexqrq1o3hr1.0.0.0user.config。
    具体你可以下载一个Procmon来跟踪一下。

    果然是保存在其他地方,刚查了一下发现有人说,User 范围配置文件没有保存在应用程序文件夹下,

    而是保存在这里:X:Documents and SettingsWindows登录用户Local SettingsApplication Data。

    win7用户

    C:UsersdacongAppDataLocal

    用户级别的App.Config在
    %USERPROFILE%Local SettingsApplication Data<Company Name>
    < appdomainname>_<eid>_<hash><verison>user.config

    其中%USERPROFILE%在Win7上一般是C:users你的登陆名
    其他可替换的部分是你程序的属性(名称,版本等)。

    原文链接:http://www.cnblogs.com/Alf7/p/4298552.html

  • 相关阅读:
    面试题29:数组中出现次数超过一半的数字
    面试题25:二叉树中和为某一值的路径
    Path Sum II
    面试题28:字符串的排列
    面试题24:二叉搜索树的后序遍历序列
    面试题23:从上往下打印二叉树
    面试题22:栈的压入、弹出序列
    面试题20:顺时针打印矩阵
    面试题18:树的子结构
    Linux 中使用 KVM
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/8384922.html
Copyright © 2011-2022 走看看