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文件的读写,封装后的函数可以大幅度地提高编程效率。


