private string __Path;
/// <summary>
/// 所有的配置节
/// </summary>
public INISegments Segments;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="vPath">INI文件路径</param>
public INIFile(string vPath)
{
__Path=vPath;
Segments=new INISegments(this);
byte [] bufsegs=new byte [32767];
int rel=GetPrivateProfileSectionNamesA(bufsegs,32767,__Path);
int iCnt,iPos;
string tmp;
if(rel>0)
{
iCnt=0;iPos=0;
for(iCnt=0;iCnt<rel;iCnt++)
{
if(bufsegs[iCnt]==0x00)
{
tmp=System.Text.ASCIIEncoding.Default.GetString(bufsegs,iPos,iCnt).Trim();
iPos=iCnt+1;
if(tmp!="")
Segments.Add(tmp);
}
}
}
}
/// <summary>
/// 获取INI文件路径
/// </summary>
public string Path
{
get {return __Path;}
}
/// <summary>
/// 读取一个整数型的配置值
/// </summary>
/// <param name="segName">配置节名</param>
/// <param name="keyName">配置项名</param>
/// <param name="iDefault">默认值</param>
/// <returns>配置值</returns>
public int GetInt(string segName,string keyName,int iDefault)
{
return GetPrivateProfileIntA(segName,keyName,iDefault,__Path);
}
/// <summary>
/// 读取一个字符串型配置值
/// </summary>
/// <param name="segName">配置节名</param>
/// <param name="keyName">配置项名</param>
/// <param name="sDefault">默认值</param>
/// <returns>配置值</returns>
public string GetString(string segName,string keyName,string sDefault)
{
StringBuilder red=new StringBuilder(1024);
GetPrivateProfileStringA(segName,keyName,"",red,1024,__Path);
return red.ToString();
}
/// <summary>
/// 写入配置项
/// </summary>
/// <param name="segName">配置节名</param>
/// <param name="keyName">配置项名</param>
/// <param name="vValue">配置值</param>
public void SetString(string segName,string keyName,string vValue)
{
WritePrivateProfileStringA(segName,keyName,vValue,__Path);
}
/// <summary>
/// 写入一个配置节
/// </summary>
/// <param name="segName">配置节名</param>
/// <param name="vData">数据</param>
/// <remarks>
/// 数据为多个配置项组成的字符串,每个配置项之间用 "\0" 分割
/// 字符串最后用 "\0\0" 结束
/// </remarks>
/// <example>
/// WriteSegment(segName,"\0\0"); 可以用于清除一个配置节下的所有配置项
/// </example>
public void WriteSegment(string segName,string vData)
{
WritePrivateProfileSectionA(segName,System.Text.ASCIIEncoding.Default.GetBytes(vData),__Path);
}
/// <summary>
/// 读取一个配置节下面的所有配置项
/// </summary>
/// <param name="o">要读取的配置节</param>
public void GetSegment(INISegment o)
{
byte [] vData=new byte [32767];
int rLen=GetPrivateProfileSectionA(o.Name,vData,32767,__Path);
o.Items.Clear();
if(rLen<1) return;
string tmp="";
int iPos,iCnt;
iPos=0;
for(iCnt=0;iCnt<rLen;iCnt++)
{