Winform配置文件分类及使用
以前只用过xml配置文件,最近项目需要使用配置文件,才开始学习配置文件的分类及使用,具体如下。
1.Properties-Settings.settings
在winform项目下的Properties中有Settings.settings文件,双击即可打开文件,如图:
1.1解释说明
- 名称(Name):相当于变量名称一样。
- 类型(Type):配置的Settings的类型。
- 范围(Scope):用户和应用程序,用户则运行时可更改,应用程序则运行时不可更改。
范围为“应用程序”的属性,读取都是从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个位置之间值的关系可以使用以下方法互相影响。
1.new() 构造函数:从系统或配置文件中读取属性值 ,“用户”属性先检查系统,如果没有值,再从配置文件中读取,“应用程序”属性都从配置文件读取。
2.Save():将settings“用户”范围的属性写入到系统中,settings实例后,在程序中被赋予新值,如果想保存这些值以便在程序下一次运行时使用,就可以调用Save保存。
例:Properties.Settings.Default.Save();
3.Reload():从系统或App.config中读取已保存的值刷新当前内存里“用户”范围的属性。先检查系统,当系统中没有保存时再从App.config中获取。
例:Properties.Settings.Default.Reload();
4.Reset():清空系统中保存的settings,并且从App.config中刷新内存里“用户”范围的属性。
例:Properties.Settings.Default.Reset();
5.Upgrade():当程序安装多个时,从最新的一个程序所保存在系统的值读取出来并刷新内存里“用户”范围的属性。
例:Properties.Settings.Default.Upgrade();
- 值(Value):配置的数据,根据类型不同值类型也要一致。
1.2使用说明
1、定义:在Settings.settings中直接添加即可。
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目录了。
以上内容参考地址:
https://www.cnblogs.com/tianciliangen/p/6016014.html?utm_source=itdadao&utm_medium=referral
https://www.cnblogs.com/ZetaChow/archive/2011/11/03/2234688.html
2.xml配置文件
XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML占用的空间比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。
在程序中访问进而操作XML文件一般有两种模型,分别是使用DOM(文档对象模型)和流模型,使用DOM的好处在于它允许编辑和更新XML文档,可以随机访问文档中的数据,可以使用XPath查询,但是,DOM的缺点在于它需要一次性的加载整个文档到内存中,对于大型的文档,这会造成资源问题。流模型很好的解决了这个问题,因为它对XML文件的访问采用的是流的概念,也就是说,任何时候在内存中只有当前节点,但它也有它的不足,它是只读的,仅向前的,不能在文档中执行向后导航操作。我们也可以在程序中两者并用。
下面我将介绍三种常用的读取XML文件的方法。分别是
1: 使用 XmlDocument
2: 使用 XmlTextReader
3: 使用 Linq to Xml
以上内容参考地址:
https://www.cnblogs.com/a1656344531/archive/2012/11/28/2792863.html
3.ini配置文件
C#读写ini文件之前要了解的概念:INI就是扩展名为"INI"的文件,其实他本身是个文本文件,可以用记事本打开,主要存放的是用户所做的选择或系统的各种参数.
C#读写ini文件其实并不是普通的文本文件.它有自己的结构.由若干段落(SECTION)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键字(KEYWORD)和一个等号,等号右边就是关键字的值(VALUE).例如:
[Section1]
KeyWord1 = Value1
KeyWord2 = Value2
...
[Section2]
KeyWord3 = Value3
KeyWord4 = Value4
C#读写ini文件最初的想法:C#命名空间中没有直接读写INI的类,当然如果你把INT当成文本文件用System.IO类来读写算我没说.
我现在介绍的是系统处理INI的方法.
虽然C#中没有,但是在"kernel32.dll"这个文件中有Win32的API函数--WritePrivateProfileString()和GetPrivateProfileString()
C#读写ini文件实现之C#声明INI文件的写操作函数WritePrivateProfileString():
[DllImport( "kernel32" )]
private static extern long WritePrivateProfileString (
string section ,string key , string val
, string filePath ) ;
参数说明:
section:INI文件中的段落;
key:INI文件中的关键字;
val:INI文件中关键字的数值;
filePath:INI文件的完整的路径和名称。
C#读写ini文件实现之C#申明INI文件的读操作函数GetPrivateProfileString():
[DllImport("kernel32")]
private static extern int GetPrivateProfileString (
string section ,
string key , string def , StringBuilder retVal ,
int size , string filePath ) ;
参数说明:
section:INI文件中的段落名称;
key:INI文件中的关键字;
def:无法读取时候时候的缺省数值;
retVal:读取数值;
size:数值的大小;
filePath:INI文件的完整路径和名称。
以上内容参考地址:
https://blog.csdn.net/shao5155285/article/details/5603070