C# 读写INI 文件
INI 格式:
[Section1]
KeyWord1 = Value1
KeyWord2 = Value2
...
[Section2]
KeyWord3 = Value3
KeyWord4 = Value4
- public class INIClass
- {
- public string inipath;
- [DllImport("kernel32")]
- private static extern long WritePrivateProfileString(
- string section,string key,string val,string filePath);
- [DllImport("kernel32")]
- private static extern int GetPrivateProfileString(
- string section,string key,
- string def,StringBuilder retVal,
- int size,string filePath);
- /// ﹤summary﹥
- /// 构造方法
- /// ﹤/summary﹥
- /// ﹤param name="INIPath"﹥文件路径﹤/param﹥
- public INIClass(string INIPath)
- {
- inipath = INIPath;
- }
- /// ﹤summary﹥
- /// 写入INI文件
- /// ﹤/summary﹥
- /// ﹤param name="Section"﹥项目名称(如 [TypeName] )﹤/param﹥
- /// ﹤param name="Key"﹥键﹤/param﹥
- /// ﹤param name="Value"﹥值﹤/param﹥
- public void IniWriteValue(string Section,string Key,string Value)
- {
- WritePrivateProfileString(Section,Key,Value,this.inipath);
- }
- /// ﹤summary﹥
- /// 读出INI文件
- /// ﹤/summary﹥
- /// ﹤param name="Section"﹥项目名称(如 [TypeName] )﹤/param﹥
- /// ﹤param name="Key"﹥键﹤/param﹥
- public string IniReadValue(string Section,string Key)
- {
- StringBuilder temp = new StringBuilder(500);
- int i = GetPrivateProfileString(Section,Key,"",temp,500,this.inipath);
- return temp.ToString();
- }
- /// ﹤summary﹥
- /// 验证文件是否存在
- /// ﹤/summary﹥
- /// ﹤returns﹥布尔值﹤/returns﹥
- public bool ExistINIFile()
- {
- return File.Exists(inipath);
- }
- }
C# ini文件读写类
using System; using System.IO;
using System.IO; using System.Runtime.InteropServices;
using System.Runtime.InteropServices; using System.Text;
using System.Text; using System.Collections;
using System.Collections; using System.Collections.Specialized;
using System.Collections.Specialized;
 namespace wuyisky{
namespace wuyisky{ /**/
  /**/ /// <summary>
  /// <summary> /// IniFiles的类
  /// IniFiles的类 /// </summary>
  /// </summary> public class IniFiles
  public class IniFiles {
  { public string FileName; //INI文件名
    public string FileName; //INI文件名 //声明读写INI文件的API函数
    //声明读写INI文件的API函数 [DllImport("kernel32")]
    [DllImport("kernel32")] private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
    private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath); [DllImport("kernel32")]
    [DllImport("kernel32")] private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
    private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath); //类的构造函数,传递INI文件名
    //类的构造函数,传递INI文件名 public IniFiles(string AFileName)
    public IniFiles(string AFileName) {
    { // 判断文件是否存在
      // 判断文件是否存在 FileInfo fileInfo = new FileInfo(AFileName);
      FileInfo fileInfo = new FileInfo(AFileName); //Todo:搞清枚举的用法
      //Todo:搞清枚举的用法 if ((!fileInfo.Exists))
      if ((!fileInfo.Exists)) { //|| (FileAttributes.Directory in fileInfo.Attributes))
      { //|| (FileAttributes.Directory in fileInfo.Attributes)) //文件不存在,建立文件
        //文件不存在,建立文件 System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);
        System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default); try
        try {
        { sw.Write("#表格配置档案");
          sw.Write("#表格配置档案"); sw.Close();
          sw.Close(); }
        }
 catch
        catch {
        { throw (new ApplicationException("Ini文件不存在"));
          throw (new ApplicationException("Ini文件不存在")); }
        } }
      } //必须是完全路径,不能是相对路径
      //必须是完全路径,不能是相对路径 FileName = fileInfo.FullName;
      FileName = fileInfo.FullName; }
    } //写INI文件
    //写INI文件 public void WriteString(string Section, string Ident, string Value)
    public void WriteString(string Section, string Ident, string Value) {
    { if (!WritePrivateProfileString(Section, Ident, Value, FileName))
      if (!WritePrivateProfileString(Section, Ident, Value, FileName)) {
      { 
  throw (new ApplicationException("写Ini文件出错"));
        throw (new ApplicationException("写Ini文件出错")); }
      } }
    } //读取INI文件指定
    //读取INI文件指定 public string ReadString(string Section, string Ident, string Default)
    public string ReadString(string Section, string Ident, string Default) {
    { Byte[] Buffer = new Byte[65535];
      Byte[] Buffer = new Byte[65535]; int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);
      int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName); //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
      //必须设定0(系统默认的代码页)的编码方式,否则无法支持中文 string s = Encoding.GetEncoding(0).GetString(Buffer);
      string s = Encoding.GetEncoding(0).GetString(Buffer); s = s.Substring(0, bufLen);
      s = s.Substring(0, bufLen); return s.Trim();
      return s.Trim(); }
    }
 //读整数
    //读整数 public int ReadInteger(string Section, string Ident, int Default)
    public int ReadInteger(string Section, string Ident, int Default) {
    { string intStr = ReadString(Section, Ident, Convert.ToString(Default));
      string intStr = ReadString(Section, Ident, Convert.ToString(Default)); try
      try {
      { return Convert.ToInt32(intStr);
        return Convert.ToInt32(intStr);
 }
      } catch (Exception ex)
      catch (Exception ex) {
      { Console.WriteLine(ex.Message);
        Console.WriteLine(ex.Message); return Default;
        return Default; }
      } }
    }
 //写整数
    //写整数 public void WriteInteger(string Section, string Ident, int Value)
    public void WriteInteger(string Section, string Ident, int Value) {
    { WriteString(Section, Ident, Value.ToString());
      WriteString(Section, Ident, Value.ToString()); }
    }
 //读布尔
    //读布尔 public bool ReadBool(string Section, string Ident, bool Default)
    public bool ReadBool(string Section, string Ident, bool Default) {
    { try
      try {
      { return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));
        return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default))); }
      } catch (Exception ex)
      catch (Exception ex) {
      { Console.WriteLine(ex.Message);
        Console.WriteLine(ex.Message); return Default;
        return Default; }
      } }
    }
 //写Bool
    //写Bool public void WriteBool(string Section, string Ident, bool Value)
    public void WriteBool(string Section, string Ident, bool Value) {
    { WriteString(Section, Ident, Convert.ToString(Value));
      WriteString(Section, Ident, Convert.ToString(Value)); }
    }
 //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中
    //从Ini文件中,将指定的Section名称中的所有Ident添加到列表中 public void ReadSection(string Section, StringCollection Idents)
    public void ReadSection(string Section, StringCollection Idents) {
    { Byte[] Buffer = new Byte[16384];
      Byte[] Buffer = new Byte[16384]; //Idents.Clear();
      //Idents.Clear();
 int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),
      int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0), FileName);
       FileName); //对Section进行解析
      //对Section进行解析 GetStringsFromBuffer(Buffer, bufLen, Idents);
      GetStringsFromBuffer(Buffer, bufLen, Idents); }
    }
 private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)
    private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings) {
    { Strings.Clear();
      Strings.Clear(); if (bufLen != 0)
      if (bufLen != 0) {
      { int start = 0;
        int start = 0; for (int i = 0; i < bufLen; i++)
        for (int i = 0; i < bufLen; i++) {
        { if ((Buffer[i] == 0) && ((i - start) > 0))
          if ((Buffer[i] == 0) && ((i - start) > 0)) {
          { String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);
            String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start); Strings.Add(s);
            Strings.Add(s); start = i + 1;
            start = i + 1; }
          } }
        } }
      } }
    } //从Ini文件中,读取所有的Sections的名称
    //从Ini文件中,读取所有的Sections的名称 public void ReadSections(StringCollection SectionList)
    public void ReadSections(StringCollection SectionList) {
    { //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section
      //Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section byte[] Buffer = new byte[65535];
      byte[] Buffer = new byte[65535]; int bufLen = 0;
      int bufLen = 0; bufLen = GetPrivateProfileString(null, null, null, Buffer,
      bufLen = GetPrivateProfileString(null, null, null, Buffer, Buffer.GetUpperBound(0), FileName);
       Buffer.GetUpperBound(0), FileName); GetStringsFromBuffer(Buffer, bufLen, SectionList);
      GetStringsFromBuffer(Buffer, bufLen, SectionList); }
    } //读取指定的Section的所有Value到列表中
    //读取指定的Section的所有Value到列表中 public void ReadSectionValues(string Section, NameValueCollection Values)
    public void ReadSectionValues(string Section, NameValueCollection Values) {
    { StringCollection KeyList = new StringCollection();
      StringCollection KeyList = new StringCollection(); ReadSection(Section, KeyList);
      ReadSection(Section, KeyList); Values.Clear();
      Values.Clear(); foreach (string key in KeyList)
      foreach (string key in KeyList) {
      { Values.Add(key, ReadString(Section, key, ""));
        Values.Add(key, ReadString(Section, key, "")); 
   }
      } }
    } ////读取指定的Section的所有Value到列表中,
    ////读取指定的Section的所有Value到列表中, //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString)
    //public void ReadSectionValues(string Section, NameValueCollection Values,char splitString) //{  string sectionValue;
    //{  string sectionValue; //  string[] sectionValueSplit;
    //  string[] sectionValueSplit; //  StringCollection KeyList = new StringCollection();
    //  StringCollection KeyList = new StringCollection(); //  ReadSection(Section, KeyList);
    //  ReadSection(Section, KeyList); //  Values.Clear();
    //  Values.Clear(); //  foreach (string key in KeyList)
    //  foreach (string key in KeyList) //  {
    //  { //    sectionValue=ReadString(Section, key, "");
    //    sectionValue=ReadString(Section, key, ""); //    sectionValueSplit=sectionValue.Split(splitString);
    //    sectionValueSplit=sectionValue.Split(splitString); //    Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString());
    //    Values.Add(key, sectionValueSplit[0].ToString(),sectionValueSplit[1].ToString()); 
  //  }
    //  } //}
    //} //清除某个Section
    //清除某个Section public void EraseSection(string Section)
    public void EraseSection(string Section) {
    { //
      // if (!WritePrivateProfileString(Section, null, null, FileName))
      if (!WritePrivateProfileString(Section, null, null, FileName)) {
      {
 throw (new ApplicationException("无法清除Ini文件中的Section"));
        throw (new ApplicationException("无法清除Ini文件中的Section")); }
      } }
    } //删除某个Section下的键
    //删除某个Section下的键 public void DeleteKey(string Section, string Ident)
    public void DeleteKey(string Section, string Ident) {
    { WritePrivateProfileString(Section, Ident, null, FileName);
      WritePrivateProfileString(Section, Ident, null, FileName); }
    } //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件
    //Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件 //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile
    //在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。
    //执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。 public void UpdateFile()
    public void UpdateFile() {
    { WritePrivateProfileString(null, null, null, FileName);
      WritePrivateProfileString(null, null, null, FileName); }
    }
 //检查某个Section下的某个键值是否存在
    //检查某个Section下的某个键值是否存在 public bool ValueExists(string Section, string Ident)
    public bool ValueExists(string Section, string Ident) {
    { //
      // StringCollection Idents = new StringCollection();
      StringCollection Idents = new StringCollection(); ReadSection(Section, Idents);
      ReadSection(Section, Idents); return Idents.IndexOf(Ident) > -1;
      return Idents.IndexOf(Ident) > -1; }
    }
 //确保资源的释放
    //确保资源的释放 ~IniFiles()
    ~IniFiles() {
    { UpdateFile();
      UpdateFile(); }
    } }
  } }
}
C# 读写INI 文件的更多相关文章
- c# 利用动态库DllImport("kernel32")读写ini文件(提供Dmo下载)
		c# 利用动态库DllImport("kernel32")读写ini文件 自从读了设计模式,真的会改变一个程序员的习惯.我觉得嘛,经验也可以从一个人的习惯看得出来,看他的代码编写习 ... 
- VB读写INI文件的四个函数以及相关API详细说明
		WritePrivateProfileString函数说明 来源:http://blog.csdn.net/wjb9921/article/details/2005000 在我们写的程序当中,总有一 ... 
- WIN32读写INI文件方法
		在程序中经常要用到设置或者其他少量数据的存盘,以便程序在下一次执行的时候可以使用,比如说保存本次程序执行时窗口的位置.大小.一些用户设置的 数据等等,在 Dos 下编程的时候,我们一般自己产生一个 ... 
- 读写ini文件
		C# 使用文件流来读写ini文件 背景 之前采用ini文件作为程序的配置文件,觉得这种结构简单明了,配置起来也挺方便.然后操作方式是通过WindowsAPI,然后再网上找到一个基于WindowsAPI ... 
- 在 WinCe 平台读写 ini 文件
		在上篇文章开发 windows mobile 上的今日插件时,我发现 wince 平台上不支持例如 GetPrivateProfileString 等相关 API 函数.在网络上我并没有找到令我满意的 ... 
- Windows中读写ini文件
		.ini 文件是Initialization File的缩写,即初始化文件,是windows的系统配置文件所采用的存储格式,来配置应用软件以实现不同用户的要求.配置文件有很多种如ini配置文件,XML ... 
- C#中读写INI文件
		C#中读写INI文件 c#的类没有直接提供对ini文件的操作支持,可以自己包装win api的WritePrivateProfileString和GetPrivateProfileString函数实现 ... 
- Qt读写ini文件
		一 背景 1 ini文件介绍 .ini 文件是Initialization File的缩写,即初始化文件. 除了windows现在很多其他操作系统下面的应用软件也有.ini文件,用来配置应用软件以实现 ... 
- 【python-ini】python读写ini文件
		[python-ini]python读写ini文件 本文实例讲述了Python读写ini文件的方法.分享给大家供大家参考.具体如下: 比如有一个文件update.ini,里面有这些内容: 1 2 ... 
随机推荐
- 2014年最新720多套Android源码2.0GB免费一次性打包下载
			之前发过一个帖子,但是那个帖子有点问题我就重新发一个吧,下面的源码是我从今年3月份开始不断整理源码区和其他网站上的android源码,目前总共有720套左右,根据实现的功能被我分成了100多个类,总共 ... 
- SSH公钥(public key)验证
			安全的设置服务器 登陆,之前用用户名和密码登陆服务器 这样不安全 ,用SSH公钥(public key)验证 这个办法能很好的解决 登陆服务器 和安全登陆服务器 的特点: 目标: Client 免输 ... 
- Java实现微信菜单json字符串拼接
			Java实现微信菜单json字符串拼接 微信菜单拼接json字符串方法 >>>>>>>>>>>>>>>> ... 
- jQuery各种选择器总结
			首先介绍几个简单的: id选择器 $('#p1').html('<font color='red'>nihao</font>); 类选择器:表示页面上所有应用了a样式的标签 $ ... 
- 页面跳转 url地址的写法
			跳转地址:分两类,wikipage和aspx页面: wikipage:当新建webpart,在网站里新建一个wikipage,然后将webpart添加进wikipage,这种情况下跳转页面需要添加si ... 
- python查看网站的RTT
			import requests time=0.0 jpserver=['jp1.herejump.com','jp1.herejump.com','jp1.herejump.com'] usserve ... 
- Centos6.5 install Python2.7 & django & mysql & apache
			#! /bin/bash#su root#get python2.7wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz #ins ... 
- UVA 10817 Headmaster's Headache(DP +状态压缩)
			Headmaster's Headache he headmaster of Spring Field School is considering employing some new teacher ... 
- HDU 1429 胜利大逃亡(续)(DP + 状态压缩)
			胜利大逃亡(续) Problem Description Ignatius再次被魔王抓走了(搞不懂他咋这么讨魔王喜欢)…… 这次魔王汲取了上次的教训,把Ignatius关在一个n*m的地牢里,并在地牢 ... 
- c++primerplus(第六版)编程题——第4章(复合类型)
			声明:作者为了调试方便,每一章的程序写在一个工程文件中,每一道编程练习题新建一个独立文件,在主函数中调用,我建议同我一样的初学者可以采用这种方式,调试起来会比较方便. (具体方式参见第3章模板) 1. ... 
