C#各种配置文件使用,操作方法总结
配置文件操作?? 1、配置文件一般分为内置配置文和用户自定义配置文件。 ? ?内置配置文件包括app.config、web.config、Settings.settings等等。 用户自定义配置文件一般是将配置信息放到XML文件或注册表中,配置信息一般包括程序设置,记录运行信息,保存控件的信息(比如位置,样式)。 一、内置配置文件操作 app.config和web.config操作类似,以app.config为例,Settings.settings能够指定值的类型和范围。 1.app.config文件操作 该配置文件中主要的节点有:connectionStrings、appSettings、configSections等,这几个属于常用,操作都略有不同,DotNet提供直接操作各个节点的方法。在用到ConfigurationManager时要添加system.configuration.dll程序集的引用。 程序移植后配置文件的修改会保存在.exe.config的文件中,但是根据我经验如果你不修改配置文件,一般exe不自动创建一个.exe.config的文件。 在项目进行编译后,在binDebuge文件下,将出现两个配置文件,一个名为“*.EXE.config”,另一个名为“*.vshost.exe.config”。第一个文件为项目实际使用的配置文件,在程序运行中所做的更改都将被保存于此;第二个文件为原代码“app.config”的同步文件,在程序运行中不会发生更改。 l ?connectionStrings:由于保存数据连接字符串。 读: ConfigurationManager.ConnectionStrings["AccessDB"].ConnectionString; 写: //设置连接字符串 ConnectionStringSettings setConnStr = newConnectionStringSettings("AccessDB",connectionString,"System.Data.OleDb"); //打开当前应用程序的app.config文件,进行操作 Configuration appConfig =ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); //由于没有更新连接字符串的方法,所以这里直接再添加一个连接字符串 appConfig.ConnectionStrings.ConnectionStrings.Add(setConnStr); appConfig.Save(); // 强制重新载入配置文件的ConnectionStrings配置节 ConfigurationManager.RefreshSection("connectionStrings"); l ?appSettings:主要存储程序设置,以键值对的形式出现。 读: String str = ConfigurationManager.AppSettings["DemoKey"]; 写: Configuration cfg=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); cfg.AppSettings.Settings["DemoKey"].Value= "DemoValue"; cfg.Save(); l ?configSections:自定义配置节 name:自定义配置节的名称。 type:自定义配置节的类型,主要包括: System.Configuration.SingleTagSectionHandler System.Configuration.DictionarySectionHandler System.Configuration.NameValueSectionHandler。 不同的type不但设置配置节的方式不一样,最后访问配置文件的操作上也有差异。 三个不同的type操作: 说明:在声明部分使用声明了一个配置节它的名字叫Test1,类型为SingleTagSectionHandler。在设置配置节部分使用 设置了一个配置节,它的第一个设置的值是Hello,第二个值是World,当然还可以有更多。其它的两个配置节和这个类似。 下面我们看在程序中如何访问这些自定义的配置节。我们用过ConfigurationSettings类的静态方法GetConfig来获取自定义配置节的信息。 //访问配置节Test1 IDictionary IDTest1 =(IDictionary)ConfigurationSettings.GetConfig("Test1"); string str = (string)IDTest1["setting1"]+" "+(string)IDTest1["setting2"]; MessageBox.Show(str); ? ? ? ?//输出Hello World //访问配置节Test1的方法2 string[] values1=new string[IDTest1.Count]; IDTest1.Values.CopyTo(values1,0); MessageBox.Show(values1[0]+""+values1[1]); ? ? //输出HelloWorld //访问配置节Test2 IDictionary IDTest2 =(IDictionary)ConfigurationSettings.GetConfig("Test2"); string[] keys=new string[IDTest2.Keys.Count]; string[] values=new string[IDTest2.Keys.Count]; IDTest2.Keys.CopyTo(keys,0); IDTest2.Values.CopyTo(values,0); MessageBox.Show(keys[0]+" "+values[0]); //访问配置节Test3 NameValueCollectionnc=(NameValueCollection)ConfigurationSettings.GetConfig("Test3"); MessageBox.Show(nc.AllKeys[0].ToString()+""+nc["Hello"]); //输出HelloWorld 配置节处理程序 返回类型 SingleTagSectionHandler Systems.Collections.IDictionary DictionarySectionHandler Systems.Collections.IDictionary NameValueSectionHandler Systems.Collections.Specialized.NameValueCollection l ?sectionGroup:自定义配置节组 配置节组是使用元素,将类似的配置节分到同一个组中。配置节组声明部分将创建配置节的 包含元素,在元素中声明配置节组,并将属于该组的节置于元素中。下面 是一个包含配置节组的配置文件的例子: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 下面是访问这个配置节组的代码: NameValueCollectionnc=(NameValueCollection)ConfigurationSettings.GetConfig("TestGroup/Test"); MessageBox.Show(nc.AllKeys[0].ToString()+""+nc["Hello"]); ? ?//输出HelloWorld 2.Settings.settings配置文件操作 这个用的不多,操作也很简单,在此不详细叙述。 二、用户自定义文件操作 1.XML配置文件操作 XML配置文件一般由我们自己定义格式,由于某些地方对于app.config不提供写的功能,我们就需要自己来操作这个XML,这里我们就拿它作为例子,来说明XML的操作。 privatevoid SaveConfig(string ConnenctionString) { XmlDocument doc=new XmlDocument(); //获得配置文件的全路径 stringstrFileName=AppDomain.CurrentDomain.BaseDirectory.ToString()+"Code.exe.config"; doc.LOAd(strFileName); //找出名称为“add”的所有元素 XmlNodeList nodes=doc.GetElementsByTagName("add"); for(int i=0;i { //获得将当前元素的key属性 XmlAttributeatt=nodes[i].Attributes["key"]; //根据元素的第一个属性来判断当前的元素是不是目标元素 if (att.Value=="ConnectionString") { //对目标元素中的第二个属性赋值 att=nodes[i].Attributes["value"]; att.Value=ConnenctionString; break; } } //保存上面的修改 doc.Save(strFileName); } 2.注册表配置操作 首先注册表也是以键值对的形式存储的,DotNet提供对注册表的操作。 操作实例: ? ? ? ? /// /// 从注册表中加载窗体位置大小等信息 /// public static voidLoadFormPosition(System.Windows.Forms.Form Fo) { Microsoft.Win32.RegistryKey rk =Microsoft.Win32.Registry.CurrentUser.OpenSubKey("Software\MapWinGISConfig",false); try { if ((rk.GetValue(Fo.Name +"_x").ToString() != "") && (rk.GetValue(Fo.Name +"_y").ToString()!= "") && (rk.GetValue(Fo.Name + "_w").ToString()!= "") && (rk.GetValue(Fo.Name+ "_h").ToString() != "")) { Fo.Location = newSystem.Drawing.Point(int.Parse(rk.GetValue(Fo.Name +"_x").ToString(),CultureInfo.InvariantCulture),int.Parse(rk.GetValue(Fo.Name +"_y").ToString(),CultureInfo.InvariantCulture)); ? ? ? ? ? ? ? ? ? ?Fo.Size = newSystem.Drawing.Size(int.Parse(rk.GetValue(Fo.Name +"_w").ToString(),int.Parse(rk.GetValue(Fo.Name +"_h").ToString(),CultureInfo.InvariantCulture)); ? ? ? ? ? ? ? ?} ? ? ? ? ? ?} ? ? ? ? ? ?catch ? ? ? ? ? ?{ ? ? ? ? ? ?} ? ? ? ? ? ?finally ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?rk.Close(); ? ? ? ? ? ?} ? ? ? ?} ? ? ? ?/// /// 将窗体位置大小信息保存在注册表中 /// public static voidSaveFormPosition(System.Windows.Forms.Form Fo) { Microsoft.Win32.RegistryKey rk =Microsoft.Win32.Registry.CurrentUser.CreateSubKey("Software\MapWinGISConfig"); ? ? ? ? ? ?if (Fo.Visible &&Fo.WindowState != System.Windows.Forms.FormWindowState.Minimized&&Fo.Location.X > -1 && Fo.Location.Y > -1 && Fo.Size.Width> 1 && Fo.Size.Height > 1) ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_x",Fo.Location.X); ? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_y",Fo.Location.Y); ? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_w",Fo.Size.Width); ? ? ? ? ? ? ? ?rk.SetValue(Fo.Name +"_h",Fo.Size.Height); ? ? ? ? ? ?} ? ? ? ? ? ?rk.Close(); ? ? ? ?} 三、应用程序信息配置 通过代码继承ApplicationSettingsBase类(C/S模式),在代码中设置相关的属性。 ? 1.继承该类一般有类属性[SettingsProvider("System.Configuration.LocalFileSettingsProvider")]-详情如下 ? 2.每个属性必须设置是[ApplicationScopedSetting()]还是[UserSocpedSetting()],还可以设置默认值[DefaultSettingValueAttribute("100,100")] ? 3.属性设置完成后,在方法级别或方法内部(视情况而定)实例化该继承的类,在窗体加载时设置相应属性。加载程序配置方法有两种-详情如下。 ? 4.如果需要可以利用事件监视设置的属性改变、保存、加载时进行哪些操作 ? 5.在窗体注销时保存设置。 详解: (一),LocalFileSettingsProvider---为应用程序设置类提供持久性存储。 ? ? 1.该类提供一种机制--程序使用配置数据的机制,其将程序的设置文件保存到默认的位置。 ? ? 2.客户端并不显示访问这个类,而是在需要服务时由设置机制自动调用,如:ApplicationSettingsBase中的很多成员都使用该类。 ? ? 3.该类将配置文件保存为.config的XML文件 ? ? ? ? 1.若字段的属性设置为[UserScopedSetting()],则保存为user.config文件, ? ? ? ? ? 保存位置C:Documentsand Settings[计算机用户名]LocalSettingsApplication Data[AssemblyCompany("huzongzhe")程序集中的一个属性] ? ? ? ? 2.若字段的属性设置为[ApplicationScopedSetting()],则保存为[程序名].exe.config文件, ? ? ? ? ? 保存位置:与可执行文件相同的目录中。 ? ?4.ToolStripManager.LoadSettings(this)和ToolStripManager.SaveSettings(this)方法解释 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- PGAdmin中的PostgreSQL语法错误
- FLEX学习-2 菜单控件
- hearbeat of RAC
- ruby-on-rails – 基于本地或CircleCI的不同Rubocop结果
- 在Ajax程序中,将带有中文的URL转码及后台解析出正确的文字
- swift – 是否可以在数组中存储具有相关值的枚举模式?
- flexigrid动态设置URL
- cocos-lua3.17 Lua tablrView工具类
- net.sf.json.JSONException: java.lang.reflect.Invocation
- ORA-12012 ORA-06512 ORACLE_OCM错误 (文档 ID 1615561.1)