C#读写ini文件的类
本文导语: 代码如下: 代码示例: using System; using System.IO; using System.Runtime.InteropServices; using System.Text; namespace Kingsense.eMenu.Common { /// /// 配置文件(*.int)操作类 /// public class RWIniFile { #region ...
代码如下:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace Kingsense.eMenu.Common
{
///
/// 配置文件(*.int)操作类
///
public class RWIniFile
{
#region 声明读写配置文件的API函数
///
/// 写配置文件 www.
///
/// 节(如果该节不存在,则创建它)
/// 键(该键不存在于指定的部分,它被创建。 如果这个参数为NULL,则整节被删除)
/// 值(如果这个参数为NULL,则删除该键)
/// 文件路径
/// 写入成功,则返回非零值。如果函数失败或者只是刷新最近访问的缓冲区版本,返回值为零
[DllImport("kernel32")]
private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
///
/// 读配置文件
///
/// 节(当值为NULL时,读取全部节)
/// 键(当值为NULL时,读取全部键)
/// 默认值(键不存在时,返回该值。当值为NULL时,则往缓冲区中写入空字符串"",避免该值为"")
/// 缓冲区,它接收检索到的字符串的指针
/// 缓冲区的大小
/// 文件的路径
/// 复制到缓冲区,不包括终止空字符的字符数
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string defaultVal, StringBuilder returnVal, int size, string filePath);
#endregion
#region 成员变量
private string fileName; //INI文件名
#endregion
#region 属性
///
/// INI文件名
///
public string FileName
{
set
{
fileName = string.IsNullOrEmpty(value) ? "my.ini" : value;
// 判断文件是否存在
FileInfo fileInfo = new FileInfo(fileName);
if ((!fileInfo.Exists))
{
//文件不存在,建立文件
StreamWriter sw = new StreamWriter(fileName, false, Encoding.Default);
try
{
sw.Close();
}
catch (Exception)
{
throw (new ApplicationException("Ini文件不存在"));
}
}
//必须是完全路径,不能是相对路径
fileName = fileInfo.FullName;
}
}
#endregion
#region 构造函数
private RWIniFile()
{
fileName = string.Empty;
}
#endregion
#region 限制只能有一个对象
private static readonly RWIniFile instance = new RWIniFile();//菜单操作对象
public static RWIniFile Instance
{
get
{
return instance;
}
}
#endregion
#region 写字符串
///
/// 写写字符串 www.
///
/// 节
/// 键
/// 值
public void WriteString(string section, string key, string value)
{
try
{
WritePrivateProfileString(section, key, value, fileName);
}
catch (Exception)
{
throw (new Exception("写入Ini文件出错"));
}
}
#endregion
#region 读字符串
///
/// 读字符串(最大可以读500个字符)
///
/// 节
/// 键
/// 值
/// 返回指定节指定键的值
public string ReadString(string section, string key, string defaultVal)
{
StringBuilder temp = new StringBuilder(500);
try
{
GetPrivateProfileString(section, key, defaultVal, temp, 500, fileName);
}
catch (Exception)
{
throw (new Exception("读取Ini文件出错"));
}
return temp.ToString();
}
#endregion
#region 读整数
///
/// 读整数
///
/// 节
/// 键
/// 默认值
/// 返回指定节指定键的值
public int ReadInteger(string section, string key, int defaultVal)
{
string result = ReadString(section, key, Convert.ToString(defaultVal));
try
{
return Convert.ToInt32(result);
}
catch (Exception)
{
throw (new Exception("该键的值不是整数!"));
}
}
#endregion
#region 写整数
///
/// 写整数
///
/// 节
/// 键
/// 值
public void WriteInteger(string section, string key, int value)
{
WriteString(section, key, value.ToString());
}
#endregion
#region 读布尔
///
/// 读布尔
///
/// 节
/// 键
/// 默认值
///
public bool ReadBool(string section, string key, bool defaultVal)
{
string result = ReadString(section, key, Convert.ToString(defaultVal));
try
{
return Convert.ToBoolean(result);
}
catch (Exception)
{
throw (new Exception("该键的值不是布尔值!"));
}
}
#endregion
#region 写Bool
///
/// 写Bool
///
///
///
///
public void WriteBool(string section, string key, bool value)
{
WriteString(section, key, Convert.ToString(value));
}
#endregion
#region 删除节
///
/// 删除节
/// k
/// 节
public void DeleteSection(string section)
{
try
{
WritePrivateProfileString(section, null, null, fileName);
}
catch (Exception)
{
throw (new Exception("无法清除Ini文件中的节"));
}
}
#endregion
#region 删除节下的键
///
/// 删除节下的键
///
/// 节
/// 键
public void DeleteKey(string section, string key)
{
WritePrivateProfileString(section, key, null, fileName);
}
#endregion
#region 更新缓冲区
///
/// 更新缓冲区(1、对于Win9X,需要实现UpdateFile方法将缓冲中的数据写入文件
//2、在Win NT, 2000和XP上,都是直接写文件,没有缓冲,无须实现UpdateFile3、执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。)
///
public void UpdateFile()
{
WritePrivateProfileString(null, null, null, fileName);
}
#endregion
#region 析构函数
///
/// 更新缓冲区
///
~RWIniFile()
{
UpdateFile();
}
#endregion
}
}