C# 读写编辑INI文件的操作
c# 读写编辑ini文件
ini文件概念
ini就是扩展名为"ini"的文件,其实他本身是个文本文件,可以用记事本打开,主要存放的是用户所做的选择或系统的各种参数。
c#读写ini文件其实并不是普通的文本文件.它有自己的结构.由若干段落(section)组成,在每个带括号的标题下面,是若干个以单个单词开头的关键字(keyword)和一个等号,等号右边就是关键字的值(value),例如,
[section1]
keyword1 = value1 keyword2 = value2 ...
[section2]
keyword3 = value3 keyword4 = value4
ini文件读操作
c#命名空间中没有直接读写ini的类,虽然c#中没有,但是在"kernel32.dll"这个文件中有win32的api函数–writeprivateprofilestring()和getprivateprofilestring()
类文件
using system; using system.collections.generic; using system.io; using system.linq; using system.text; namespace files { class filesini { // 声明ini文件的写操作函数 writeprivateprofilestring() [system.runtime.interopservices.dllimport("kernel32")] private static extern long writeprivateprofilestring(string section, string key, string val, string filepath); // 声明ini文件的读操作函数 getprivateprofilestring() [system.runtime.interopservices.dllimport("kernel32")] private static extern int getprivateprofilestring(string section, string key, string def, system.text.stringbuilder retval, int size, string filepath); /// 写入ini的方法 public void iniwrite(string section, string key, string value,string path) { // section=配置节点名称,key=键名,value=返回键值,path=路径 writeprivateprofilestring(section, key, value, path); } //读取ini的方法 public string iniread(string section, string key,string path) { // 每次从ini中读取多少字节 system.text.stringbuilder temp = new system.text.stringbuilder(255); // section=配置节点名称,key=键名,temp=上面,path=路径 getprivateprofilestring(section, key, "", temp, 255, path); return temp.tostring(); } //删除一个ini文件 public void inidelete(string filepath) { file.delete(filepath); } } }
主函数
using files; using system; using system.collections.generic; using system.componentmodel; using system.data; using system.drawing; using system.linq; using system.text; using system.threading.tasks; using system.windows.forms; namespace ini文件读写操作 { public partial class form1 : form { public form1() { initializecomponent(); } string ip; int port; int speed; //声明默认配置文件路径 public string inipath = convert.tostring(system.appdomain.currentdomain.basedirectory) + "config.ini"; private void form1_load(object sender, eventargs e) { filesini configini = new filesini(); ip = configini.iniread("fanuc机器人控制参数", "ip", inipath); port = convert.toint32(configini.iniread("fanuc机器人控制参数", "port", inipath)); speed = convert.toint32(configini.iniread("fanuc机器人控制参数", "speed", inipath)); textbox1.text = ip; textbox2.text = port.tostring(); textbox3.text = speed.tostring(); } } }
ini文件修改操作
修改ip
private void button1_click(object sender, eventargs e) { filesini configini = new filesini(); configini.iniwrite("fanuc机器人控制参数", "ip", textbox1.text, inipath); }
ini文件写操作
添加新的配置节点【kuka机器人控制参数】
private void button1_click(object sender, eventargs e) { filesini configini = new filesini(); configini.iniwrite("kuka机器人控制参数", "ip", textbox1.text, inipath); }
在某个配置节点下,添加新的关键字angle
private void button1_click(object sender, eventargs e) { filesini configini = new filesini(); configini.iniwrite("kuka机器人控制参数", "angle", textbox1.text, inipath); }
c#读写ini文件案例
提示:以下是本篇文章正文内容,下面案例可供参考
一、命名空间
首先需要引用命名空间命名空间
using system.runtime.interopservices;
二、函数封装
代码如下(示例):
[dllimport("kernel32")] private static extern long writeprivateprofilestring(string section, string key, string val, string filepath); [dllimport("kernel32")] private static extern long getprivateprofilestring(string section, string key, string def, stringbuilder retval, int size, string filepath); #region 创建文件 public static void createfile(string path) { if (!string.isnullorempty(path)) { try { string dr = path.getdirectoryname(path); if (!directory.exists(dr)) { directory.createdirectory(dr); } if (!file.exists(path)) { filestream fs = file.create(path); fs.close(); } } catch (exception e) { } } } #endregion #region 写ini文件 ///ini文件中的节名 ///ini 文件中的健 ///要写入该健所对应的值 ///ini文件路径 public static bool writeinidata(string section, string key, string val, string inifilepath) { if (file.exists(inifilepath)) { long opst = writeprivateprofilestring(section, key, val, inifilepath); if (opst == 0) { return false; } else { return true; } } else { createfile(inifilepath); long opst = writeprivateprofilestring(section, key, val, inifilepath); if (opst == 0) { return false; } else { return true; } } } #endregion #region 取ini文件 /// 节点名称 /// 对应的key /// 读不到值时返回的默认值 /// 文件路径 public static string readinidata(string section, string key, string notext, string inifilepath) { if (file.exists(inifilepath)) { stringbuilder temp = new stringbuilder(1024); long k = getprivateprofilestring(section, key, notext, temp, 1024, inifilepath); if (k != 0) { return temp.tostring(); } else { return string.empty; } } else { return string.empty; } } #endregion
三、数据读写
代码如下(示例):
#region 把key——value写入ini文件 public bool savepwdtoini(string pwd) { string path = system.appdomain.currentdomain.basedirectory; path += "\\" + "ini" + "\\password.ini"; bool b = writeinidata("section_1","pwd",pwd,path); return b; } #endregion #region 从路径下的ini文件读取key对应的value public string readpwdfromini() { string path = system.appdomain.currentdomain.basedirectory; path += "\\" + "ini" + "\\password.ini"; string s = readinidata("section_1","pwd","error",path); return s; } //数据读写 bool b = writeinidata("section_1", "key", value, path); string s = readinidata("section_2", "key", "error", path);
以上内容简单介绍了c#里面ini文件的读写,封装后的函数可以大幅度地提高编程效率。