君临 发表于 2014-12-30 15:22:35

C#读写ini

玄机论坛 C#读写ini
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;

namespace helper
{

    /// <summary>
    /// ini文件读与写
    /// </summary>
    public class ClsIniFile
    {
      //文件INI名称
      public string Path;
      ////声明读写INI文件的API函数
      
      private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
      
      private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
      //类的构造函数,传递INI文件名
      public ClsIniFile(string inipath){ Path = inipath; }
      /// <summary>
      /// 写入INI文件
      /// </summary>
      /// <param name="Section">配置节</param>
      /// <param name="Key">键名</param>
      /// <param name="Value">键值</param>
      public void IniWriteValue(string Section, string Key, string Value)
      {
            WritePrivateProfileString(Section, Key, Value, this.Path);
      }

      /// <summary>
      /// 读取制定INI文件键值
      /// </summary>
      /// <param name="Section">配置节</param>
      /// <param name="Key">键名</param>
      /// <returns></returns>
      public string IniReadValue(string Section, string Key)
      {
            StringBuilder temp = new StringBuilder(255);
            int i = GetPrivateProfileString(Section, Key, "", temp, 255, this.Path);
            return temp.ToString();
      }
    }
}

调用实例类
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using SetRouter.RouterModel;

namespace helper
{
    class StringUtility
    {
      /// <summary>
      /// 写ini
      /// </summary>
      /// <param name="iniPath">配置文件路径</param>
      /// <param name="rd">实体对象模型</param>
      public static void wirtini(string iniPath, Rmod rd)
      {
            try
            {
                ClsIniFile cl = new ClsIniFile(iniPath);
//第一个参数为节点,第二个为字段,第三个为值
                cl.IniWriteValue("RouterConfig", "LoginUser", rd.LoginUser);
                cl.IniWriteValue("RouterConfig", "LoginPwd", rd.LoginPwd);
                cl.IniWriteValue("RouterConfig", "LoginIp", rd.LoginIp);
                cl.IniWriteValue("RouterConfig", "WirelessSSID", rd.WirelessSSID);
                cl.IniWriteValue("RouterConfig", "WirelessPwd", rd.WirelessPwd);
                cl.IniWriteValue("RouterConfig", "PppoeName", rd.PppoeName);
                cl.IniWriteValue("RouterConfig", "PppoePwd", rd.PppoePwd);
                MessageBox.Show("配置文件写入成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            }
            catch (Exception ex)
            {
                MessageBox.Show("写入配置文件失败.!" + "\n" + ex.Message);
                return;
            }

      }

      /// <summary>
      /// 读ini
      /// </summary>
      /// <param name="iniPath">配置文件路径</param>
      /// <returns>返回实体对象</returns>
      public static Rmod Readini(string iniPath)
      {
            try
            {
                Rmod rd = new Rmod();
                ClsIniFile ini = new ClsIniFile(iniPath);
                rd.LoginUser = ini.IniReadValue("RouterConfig", "LoginUser").Trim();
                rd.LoginPwd = ini.IniReadValue("RouterConfig", "LoginPwd").Trim();
                rd.LoginIp = ini.IniReadValue("RouterConfig", "LoginIp").Trim();
                rd.WirelessSSID = ini.IniReadValue("RouterConfig", "WirelessSSID").Trim();
                rd.WirelessPwd = ini.IniReadValue("RouterConfig", "WirelessPwd").Trim();
                rd.PppoeName = ini.IniReadValue("RouterConfig", "PppoeName").Trim();
                rd.PppoePwd = ini.IniReadValue("RouterConfig", "PppoePwd").Trim();
                return rd;
            }
            catch (Exception ex)
            {
                MessageBox.Show("读取配置文件内容失败.!" + "\n" + ex.Message);
                return null;
            }


      }
    }
}

ini配置如下

老段啦 发表于 2014-12-30 15:41:10

太感谢老大了终于解决了

老段啦 发表于 2014-12-30 15:46:43

同志们,我犯的错误原来就是一个数据类型的问题,经老大指点 ,终于知道为啥了!
上面是VB对win32api的说明;
string大家好理解
String,指定一个字串缓冲区。这个在C#是stringBulider;
Long型一定要注意,VB和C#是有区别的。long型在VB中标识32位整数,所以我们在写这个数据类型的时候要用int,不能用long型。如果用Long型的话,会读取报错的。

老大不说这谁能知道。。。。。。。。。

971790945 发表于 2015-1-2 00:10:20

看代码君临写的拨号器:D

xuesonggg 发表于 2016-1-12 14:09:45

挺好的哦,哈哈,学过

jacksonlao 发表于 2016-5-6 14:33:25

很好用,谢谢!

hehe5487 发表于 2016-6-16 13:11:16

gfdz打广告

livehu5188 发表于 2017-11-1 14:05:31

谢谢分享 谢谢

huang9126 发表于 2017-11-3 12:03:44

可以把文件名也变成一个参数,这样就应该可以做成一个静态类了。

iesoft 发表于 2019-4-1 23:12:22

厉害!11111111111
页: [1] 2
查看完整版本: C#读写ini