C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#读写配置文件(config.ini)

C#读写配置文件方式(config.ini)入门

作者:kidylong

这篇文章主要介绍了C#读写配置文件方式(config.ini)入门,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

C#读写配置文件(config.ini)

最近学习C#,遇到要读取配置文件的问题,记录下学习过程

代码部分

namespace 写入读取配置文件
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        /*
         * 1)private 不是必需的,根据设计了,public也可以.
         * 2)extern 关键字表示该方法是要调用非托管代码.如果使用extern关键字来引入非托管代码,则必须也同时使用static.为什么要用static,是因为你调用非托管代码,总得有个入口点吧,那么你声明的这个GetPrivateProfileString方法就是你要调用的非托管代码的入口.想想Main函数,是不是也必须是static呢.
         * 3) 为什么要用long,我看也有小伙伴也有用int的,估计是long支持的更多位数
         */
        [DllImport("kernel32")]// 读配置文件方法的6个参数:所在的分区(section)、 键值、     初始缺省值、   StringBuilder、  参数长度上限 、配置文件路径
        public static extern long GetPrivateProfileString(string section, string key, string defaultValue, StringBuilder retVal, int size, string filePath);
        [DllImport("kernel32")]//写入配置文件方法的4个参数:  所在的分区(section)、  键值、     参数值、       配置文件路径
        private static extern long WritePrivateProfileString(string section, string key, string value, string filePath);
        /*读配置文件*/
        public static string GetValue(string section, string key)
        {
            // ▼ 获取当前程序启动目录
           // string strPath = Application.StartupPath + @"/config.ini"; 这里是绝对路径
            string strPath = "./config.ini";  //这里是相对路径
            if (File.Exists(strPath))  //检查是否有配置文件,并且配置文件内是否有相关数据。
            {
                StringBuilder sb = new StringBuilder(255);
                GetPrivateProfileString(section, key, "配置文件不存在,读取未成功!", sb, 255, strPath);
                return sb.ToString();
            }
            else
            {
                return string.Empty;
            }
        }
        /*写配置文件*/
        public static void SetValue(string section, string key, string value)
        {
            // ▼ 获取当前程序启动目录
           // string strPath = Application.StartupPath + @"/config.ini";  这里是绝对路径
            string strPath = "./config.ini";      //这里是相对路径,
            WritePrivateProfileString(section, key, value, strPath);
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            richTextBox1.Text = GetValue("参数", "波特率");  //这里通过界面的按钮,读取配置文件。
        }
        private void richTextBox1_TextChanged(object sender, EventArgs e)//当winform界面的数据更改时,自动保存到配置文件,以便下次打开时保持最后更改的数据
        {
           SetValue("参数", "波特率",this.richTextBox1.Text.ToString());      
        }
         private void Form1_Load(object sender, EventArgs e)//程序开始自动读取上一次配置后的文件
        {
            richTextBox1.Text = GetValue("参数", "波特率");  //这里通过界面的按钮,读取配置文件。
        }
    }
}

配置文件(config.ini) 部分

winform部分

第一次启动如下图所示,点击按钮没有任何数据,需要先写入,如10,程序自动将10存入配置文件中。

关闭程序,再打开,文本框就有10了。

C#使用App.config和INI两种方式读写配置文件

说明

将系统参数写到配置文件中,可避免修改参数必须重新打包程序问题。

c#操作配置文件有几种方法,下面分别介绍使用App.config和INI文件方式管理。

使用App.config

注意:

App.config文件

<connectionStrings>
    <add name="dbConnectionString" connectionString="Data Source=10.0.1.11;Initial Catalog=Test;Persist Security Info=True;User ID=sa;Password=xxx;Max Pool Size=512" providerName="System.Data.SqlClient"/>
</connectionStrings>
<appSettings>
    <add key="abc" value="welcome"/>
</appSettings>

读数据库配置信息

SqlConnection con = new SqlConnection();
con.ConnectionString = ConfigurationManager.ConnectionStrings["dbConnectionString"].ConnectionString;

读自定义信息

String str = ConfigurationManager.AppSettings["abc"];

写配置信息要用到OpenExeConfiguration。

//获取可操作的Configuration对象
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
 //写入<add>元素的Value
 config.AppSettings.Settings["abc"].Value = "hello";
 //保存
 config.Save();
 //刷新
 ConfigurationManager.RefreshSection("appSettings");

使用INI文件

优点为配置文件可以指定路径,配置信息格式简单,使用系统库文件即可操作ini文件。

public class IniService
    {
      //引入系统库文件
      [DllImport("kernel32")]
      private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
      [DllImport("kernel32")]
      private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
      [DllImport("kernel32.dll")]
      private extern static int WritePrivateProfileSectionA(string segName, string sValue, string fileName);
public string iniPath;
      /// <summary>
      /// 构造方法
      /// </summary>
      /// <param name="INIPath">文件路径</param>
      public IniService(string INIPath)
      {
          iniPath = INIPath;
      }
      /// <summary>
      /// 写入INI文件
      /// </summary>
      /// <param name="Section">项目名称(如 [TypeName] )</param>
      /// <param name="Key">键</param>
      /// <param name="Value">值</param>
      public void IniWriteValue(string Section, string Key, string Value)
      {
          WritePrivateProfileString(Section, Key, Value, this.iniPath);
      }
      /// <summary>
      /// 读出INI文件
      /// </summary>
      /// <param name="Section">项目名称(如 [TypeName] )</param>
      /// <param name="Key">键</param>
      public string IniReadValue(string Section, string Key)
      {
          StringBuilder temp = new StringBuilder(500);
          int i = GetPrivateProfileString(Section, Key, "", temp, 500, this.iniPath);
          return temp.ToString();
      }
      /// <summary>
      /// 删除指定的节的所有内容
      /// </summary>
      /// <param name="Section">要删除的节的名字</param>
      public void DeleteSection(string Section)
      {
          WritePrivateProfileSectionA(Section, null, this.iniPath);
      }
      /// <summary>
      /// 验证文件是否存在
      /// </summary>
      /// <returns>布尔值</returns>
      public bool isExistINIFile()
      {
          return File.Exists(iniPath);
      }
  }

使用时需要指定ini文件位置,测试程序在工程中新建config文件夹,创建System.ini文件,并且右键属性中设置“如果较新则复制”。

            //获取程序路径
            string stCurrentPath = AppDomain.CurrentDomain.BaseDirectory;
            if (!stCurrentPath.Substring(stCurrentPath.Length - 1).Equals(@"\"))
            {
                stCurrentPath = stCurrentPath + @"\";
            }
            //初始化IniService
           IniService ini = new IniService(stCurrentPath + "config\\System.ini");
           //写入System.ini
            ini.IniWriteValue("Sys", "Msg","Welcome");
            //读数据
            string strInterval = ini.IniReadValue("Sys", "Msg");

配置文件

System.ini

[Sys]
Msg=Welcome

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文