C#读写ini文件操作

来源:互联网 发布:网络广播方案 编辑:程序博客网 时间:2024/06/10 06:28

ini文件,是windows操作系统下的配置文件,ini文件是一种按照特点方式排列的文本文件,它的构成分为三部分,结构如下:

[Section1]key 1 = value2key 1 = value2……[Section2]key 1 = value1key 2 = value2……


文件由若干个段落(section)组成,每个段落又分成若干个键(key)和值(value)。

 

C#和Win32 API函数

        C#并不像C++,拥有属于自己的类库。C#使用的类库是.Net框架为所有.Net程序开发提供的一个共有的类库——.Net FrameWork SDK。虽然.Net FrameWork SDK内容十分庞大,功能也非常强大,但还不能面面俱到,至少它并没有提供直接操作INI文件所需要的相关的类。在本文中,C#操作INI文件使用的是Windows系统自带Win32的API函数——WritePrivateProfileString()和GetPrivateProfileString()函数。这二个函数都位于“kernel32.dll”文件中。
        我们知道在C#中使用的类库都是托管代码(Managed Code)文件,而Win32的API函数所处的文件,都是非托管代码(Unmanaged Code)文件。这就导致了在C#中不可能直接使用这些非托管代码文件中的函数。好在.Net框架为了保持对下的兼容,也为了充分利用以前的资源,提出了互操作,通过互操作可以实现对Win32的API函数的调用。互操作不仅适用于Win32的API函数,还可以用来访问托管的COM对象。C#中对Win32的API函数的互操作是通过命名空间“System.Runtime.InteropServices”中的“DllImport”特征类来实现对windows api函数的使用,它的主要作用是指示此属性化方法是作为非托管DLL的输出实现的。

 

C#申明INI文件的写操作函数WritePrivateProfileString():

[DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string val, string filePath); section: 要写入的段落名key: 要写入的键,如果该key存在则覆盖写入val: key所对应的值filePath: INI文件的完整路径和文件名

C#申明INI文件的读操作函数GetPrivateProfileString():

[DllImport("kernel32")]private static extern int GetPrivateProfileString(string section, string key, string defVal, StringBuilder retVal, int size, string filePath); section:要读取的段落名key: 要读取的键defVal: 读取异常的情况下的缺省值retVal: key所对应的值,如果该key不存在则返回空值size: 值允许的大小filePath: INI文件的完整路径和文件名

 

 

下面是我写的一个例子:

 

当我输入完后,点击录入按钮时候,就会写入到ini文件中:

当点击读取按钮的时候就会把INI文件中的节点信息的值填充到窗体中的文本框中

 

后台代码:

在项目名称空间的上方要添加以下的引用:

using System.Runtime.InteropServices;//引用命名空间,该空间为了调用windows api。

  #region "声明变量"        /// <summary>        /// 写入INI文件        /// </summary>        /// <param name="section">节点名称[如[TypeName]]</param>        /// <param name="key">键</param>        /// <param name="val">值</param>        /// <param name="filepath">文件路径</param>        /// <returns></returns>        [DllImport("kernel32")]        private static extern long WritePrivateProfileString(string section,string key,string val,string filepath);        /// <summary>        /// 读取INI文件        /// </summary>        /// <param name="section">节点名称</param>        /// <param name="key">键</param>        /// <param name="def">值</param>        /// <param name="retval">stringbulider对象</param>        /// <param name="size">字节大小</param>        /// <param name="filePath">文件路径</param>        /// <returns></returns>        [DllImport("kernel32")]        private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retval,int size,string filePath);        #endregion


申明全局路径的变量:

        private string strFilePath = Application.StartupPath + "\\MyConfig.ini";//获取INI文件路径        private string strSec = ""; //INI文件名


声明下,我的ini文件是新建在debug下面的:

       private void bt_write_Click(object sender, EventArgs e)        {            try            {                //根据INI文件名设置要写入INI文件的节点名称                //此处的节点名称完全可以根据实际需要进行配置                strSec = Path.GetFileNameWithoutExtension(strFilePath);                WritePrivateProfileString(strSec, "user", text_user.Text.Trim(), strFilePath);                WritePrivateProfileString(strSec, "password", text_password.Text.Trim(), strFilePath);                MessageBox.Show("录入成功");            }            catch (Exception ex)            {                MessageBox.Show(ex.Message.ToString());            }        }


 

//  读取按钮事件        private void bt_read_Click(object sender, EventArgs e)        {            if (File.Exists(strFilePath))//读取时先要判读INI文件是否存在            {                strSec = Path.GetFileNameWithoutExtension(strFilePath);                text_user.Text = ContentValue(strSec, "user");                text_password.Text = ContentValue(strSec, "password");            }            else            {                MessageBox.Show("MyConfig.ini文件不存在");            }        }


在读取的时候用到了自定义读取函数的方法,在该方法中调用了系统函数,

        private string ContentValue(string Section, string key)        {            StringBuilder temp = new StringBuilder(32);            GetPrivateProfileString(Section, key, "", temp, 32, strFilePath);            return temp.ToString();        }


以上所述的就是简单的用C#语言操作INI文件的过程,只用到了系统函数中的两个(写入函数和读取函数)还有其他的函数比如说时删除INI文件函数等等,删除INI文件函数其实就是把键对应的值设置为null就可以了。自动登录和连接设置都用到了INI文件。

原创粉丝点击