不会用配置文件(ini)去设置代码中的变量?我教你啊!

Posted 老虎中的小白Gentle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了不会用配置文件(ini)去设置代码中的变量?我教你啊!相关的知识,希望对你有一定的参考价值。

为什么要用配置文件

用配置文件去设置变量可以提高程序的复用性,也很方便。改功能或是参数值,只需要在配置文件中修改就行了,不用修改代码。这样没有源代码,也可以轻松配置程序去实现自己想要的功能。

配置文件在Windows下格式

[Section1]
KeyWord1 = Value1
KeyWord2 = Value2

[Section2]
KeyWord3 = Value3
KeyWord4 = Value4

C#中配置文件内容获取或修改的函数如下

        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retval, int size, string filePath);

        [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string section, string key, string iValue, string filePath);

参数说明:

  1. section:ini文件中的段落;
  2. key:INI文件中的关键字;
  3. def:一般为null;
  4. retval:配置文件获取的值;
  5. size:字节数;
  6. filePath:配置文件的路径+文件名

例子:

 GetPrivateProfileString("SETUP", "ItemName", null, ItemName, 1024, ConfigFilePath);

下面是我自己写的一个读取配置文件中内容的函数

using System;
using System.IO;
using System.Text;
using System.Windows.Forms;

namespace GetOrSetINI
{

    public partial class Test : Form
    {

        public Test()
        {
            InitializeComponent();
        }

        private void Test_Load(object sender, EventArgs e)
        {
            string ConfigFilePath = Path.Combine(System.IO.Directory.GetCurrentDirectory(), "LocalSetting.ini");
            SequenceFile sequenceFile = new SequenceFile();
            string ItemName = "";
            string ErrMessage = "";
            int number =  sequenceFile.MYGetPrivateProfileString("SETUP", "ItemName", ref ItemName, ConfigFilePath, ref ErrMessage);
            if(number == 0)
            {
                MessageBox.Show(string.Format("Error:{0}", ErrMessage));
            }
            MessageBox.Show(string.Format("value:{0},大小:{1}", ItemName, number));

        }
    }

    public class SequenceFile
    {
        //参数说明:
        //section:INI文件中的段落;
        //key:INI文件中的关键字;
        //val:INI文件中关键字的数值;
        //filePath:INI文件的完整的路径和名称。

        public int MYGetPrivateProfileString(string section, string key, ref string retVal, string filePath, ref string ErrMessage)
        {
           
            if (!this.ExistINIFile(filePath,ref ErrMessage))
            {
                return 0;
            }

            try
            {
                using (FileStream FS = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    using (StreamReader SR = new StreamReader(FS, Encoding.Default))
                    {
                        string StrLine = SR.ReadLine();
                        while (StrLine != null)
                        {
                            if (StrLine.Trim() == string.Format("[{0}]", section))
                            {

                                while (StrLine != null)
                                {
                                    StrLine = SR.ReadLine();
                                    if (StrLine.Contains("[") && StrLine.Contains("]"))
                                    {
                                        ErrMessage = string.Format("配置文件中没有{0}", key);
                                        return 0;
                                    }
                                    string[] StrLineSplit = StrLine.Split('=');
                                    if (key == StrLineSplit[0].Trim())
                                    {
                                        retVal = (StrLine.Substring(StrLineSplit[0].Length + 1)).Trim();
                                        return retVal.Length;
                                    }
                                }

                            }
                            StrLine = SR.ReadLine();

                        }
                        ErrMessage = string.Format("配置文件中没有[{0}]", section);
                    }

                }
            }
       
            catch(Exception e)
            {
                ErrMessage = e.Message;
            }
            return 0;
        }

        public bool ExistINIFile(string filePath, ref string ErrMessage)
        {

            if (!File.Exists(filePath))
            {
                ErrMessage = "文件不存在\\n";
            };
            return true;
        }


    }


}

以上是关于不会用配置文件(ini)去设置代码中的变量?我教你啊!的主要内容,如果未能解决你的问题,请参考以下文章

还不会写springboot接口?来我教你

不会全排列算法(Javascript实现),我教你呀!

springboot系列(十九):如何集成redis?不会我教你 | 超级详细,建议收藏

SpringBoot系列(四十三):如何集成ElasticSearch,不会我教你|超级详细,建议收藏

springboot系列(十九):如何集成redis?不会我教你 | 超级详细,建议收藏

springboot系列(十九):如何集成redis?不会我教你 | 超级详细,建议收藏