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

相关文章