Properties.Settings.Default的使用

基本使用

1、定义

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

2、读取配置值

text1.text = Properties.Settings.Default.FieldName;   //FieldName是你定义的字段

3、修改和保存配置

Properties.Settings.Default.FieldName = "server";

Properties.Settings.Default.Save();//使用Save方法保存更改

4、自定义

    创建一个配置类FtpSetting。在WinForm应用程序里,一切配置类都得继承自 ApplicationSettingsBase 类。

sealed class FtpSettings : ApplicationSettingsBase{
[UserScopedSetting]
[DefaultSettingValue("127.0.0.1")]
public string Server
{
get { return (string)this["Server"]; }
set { this["Server"] = value; }
}
[UserScopedSetting]
[DefaultSettingValue("21")]
public int Port
{
get { return (int)this["Port"]; }
set { this["Port"] = value; }
}
}


使用

private void button2_Click(object sender, EventArgs e)
{
FtpSettings ftp = new FtpSettings();
string msg = ftp.Server + ":" + ftp.Port.ToString();
MessageBox.Show(msg);
}


我们在使用上述FtpSetting 配置时,当然要先进行赋值保存,然后再使用,后面再修改,再保存,再使用。
private void button2_Click(object sender, EventArgs e)
{
FtpSettings ftp = new FtpSettings();
ftp.Server = "ftp.test.com";
ftp.Port = 8021;
ftp.Save();
ftp.Reload();
string msg = ftp.Server + ":" + ftp.Port.ToString();
MessageBox.Show(msg);
}
已经Save了,你可能会在应用程序文件夹里找不到它到底保存到哪里去了。由于我们是用UserScope的,所以其实该配置信息是保存到了你的Windows的个人文件夹里去了。比如

C:\Documents and Settings\brooks\Local Settings\Application Data\TestWinForm

保存位置

windows 7

1.C:\Users\用户名\Local Settings\Application Data\Microsoft

使用你的实际用户名代替上面的用户名。这种情况下是你没有设置程序集信息保存的位置。

2.%AppData%

在资源浏览器的地址栏中输入上面的变量名然后会车即显示文件夹。

这个没有发现具体什么情况保存保存在这个位置,只不过在里面发现配置文件了。这里不进行测试了。请那位大牛知道告诉一声。

C:\Users\CCH\AppData\Roaming

3.C:\Users\用户名\AppData\Local

这是设置程序集里面的公司名称以后保存的位置。

上面的文件夹下有

你的程序名+随机数 的文件夹+版本号的文件夹里面有个user.config文件

其他说明

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“。之后清空bin\debug目录以及obj目录,重新调试发现path还是”D:\Test“。
莫非这个设置保存在其他地方?

在系统盘appdata下面,不同操作系统有一定差别,比如我的server03系统,某一个程序的setting放在下面:
C:\Documents and Settings\Administrator\Application Data\ruizhi\WindowsApplication1.exe_Url_0l2pjhmtjiyqprtjqg2f1bexqrq1o3hr\1.0.0.0\user.config。
具体你可以下载一个Procmon来跟踪一下。

果然是保存在其他地方,刚查了一下发现有人说,User 范围配置文件没有保存在应用程序文件夹下,而是保存在这里:X:\Documents and Settings\Windows登录用户\Local Settings\Application Data。

win7用户

C:\Users\dacong\AppData\Local\

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值