不会用配置文件(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);
参数说明:
- section:ini文件中的段落;
- key:INI文件中的关键字;
- def:一般为null;
- retval:配置文件获取的值;
- size:字节数;
- 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系列(十九):如何集成redis?不会我教你 | 超级详细,建议收藏
SpringBoot系列(四十三):如何集成ElasticSearch,不会我教你|超级详细,建议收藏