目录
- C#读写配置文件(config.ini)
 - 代码部分
 - 配置文件(config.ini) 部分
 - winform部分
 - C#使用App.config和INI两种方式读写配置文件
 - 说明
 - 使用App.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会编译为“项目名.exe.config”文件。
 - 程序中需要添加引用System.Configuration。
 - 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
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持。
	声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
		
评论(0)