c#中各种配置文件的操作

CSDN博客

img z702143700

C#各种配置文件使用,操作方法总结

发表于2015/5/22 10:12:54  748人阅读

分类: .Net

配置文件操作

   配置文件一般分为内置配置文和用户自定义配置文件。

   内置配置文件包括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的文件。

在项目进行编译后,在bin\Debuge文件下,将出现两个配置文件,一个名为“*.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(),CultureInfo.InvariantCulture), 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\[计算机用户名]\LocalSettings\Application Data\[AssemblyCompany("huzongzhe")程序集中的一个属性]\

        2.若字段的属性设置为[ApplicationScopedSetting()],则保存为[程序名].exe.config文件,

          保存位置:与可执行文件相同的目录中。

   4.ToolStripManager.LoadSettings(this)和ToolStripManager.SaveSettings(this)方法解释

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容