classCSenseIni
{/************************************************************************/
/*写操作
* strSection 节
* strKey 键
* strValue 需要写入的值
* strFilePath 配置文件的全路径(wince中使用相对路径)*/
/************************************************************************/
public static void WriteIni(string strSection, string strKey, string strValue, stringstrFilePath)
{string strCurr =CPlatformConfig.CurrentPath;if (strCurr.Length < 2)
strCurr+=strFilePath;elsestrCurr+= "\\" +strFilePath;
INICommon(false, strSection, strKey, strValue, strCurr);
}/************************************************************************/
/*读操作
* strSection 节
* strKey 键
* strDefault 如果未找到相应键对应的值则填入此值
* strFilePath 配置文件的全路径(wince中只能使用绝对全路径)
* 返回: 指定键的相应值
* 说明: 如果在文件中未找到相应节则添加,未找到相应键亦添加,如果键对应的值为空串则使用默认值填充ini文件并返回
/************************************************************************/
public static string GetIni(string strSection, string strKey, string strDefault, stringstrFilePath)
{string strCurr =CPlatformConfig.CurrentPath;if (strCurr.Length < 2)
strCurr+=strFilePath;elsestrCurr+= "\\" +strFilePath;return INICommon(true, strSection, strKey, strDefault, strCurr);
}private static string[] Split(string input, stringpattern)
{string[] arr =System.Text.RegularExpressions.Regex.Split(input, pattern);returnarr;
}private static void AppendToFile(string strPath, stringstrContent)
{if (strContent.Length == 0)return;
FileStream fs= newFileStream(strPath, FileMode.Append);
StreamWriter streamWriter= newStreamWriter(fs, System.Text.Encoding.Default);
streamWriter.BaseStream.Seek(0, SeekOrigin.End);
streamWriter.WriteLine(strContent);
streamWriter.Flush();
streamWriter.Close();
fs.Close();
}private static void WriteArray(string strPath, string[] strContent)
{
FileStream fs= newFileStream(strPath, FileMode.Truncate);
StreamWriter streamWriter= newStreamWriter(fs, System.Text.Encoding.Default);
streamWriter.BaseStream.Seek(0, SeekOrigin.Begin);for (int i = 0; i < strContent.Length; i++)
{if (strContent[i].Trim() == "\r\n")continue;if (strContent[i].Trim() == "")continue;
streamWriter.WriteLine(strContent[i].Trim());
}
streamWriter.Flush();
streamWriter.Close();
fs.Close();
}//INI解析
private static string INICommon(bool isRead, string ApplicationName, string KeyName, string Default, stringFileName)
{string strSection = "[" + ApplicationName + "]";stringstrBuf;try{//a.文件不存在则创建
if (!File.Exists(FileName))
{
FileStream sr=File.Create(FileName);
sr.Close();
}//读取INI文件
System.IO.StreamReader stream = newSystem.IO.StreamReader(FileName, System.Text.Encoding.Default);
strBuf=stream.ReadToEnd();
stream.Close();
}catch(Exception e)
{returnDefault;
}string[] rows = Split(strBuf, "\r\n");stringoneRow;int i = 0;for (; i < rows.Length; i++)
{
oneRow=rows[i].Trim();//空行
if (0 ==oneRow.Length)continue;//此行为注释
if (';' == oneRow[0])continue;//没找到
if (strSection !=oneRow)continue;//找到了
break;
}//b.没找到对应的section,创建一节并创建属性
if (i >=rows.Length)
{
AppendToFile(FileName,"\r\n" + strSection + "\r\n" + KeyName + "=" +Default);returnDefault;
}//找到section
i+= 1; //跳过section
int bakIdxSection = i;//备份section的下一行
string[] strLeft;//查找属性
for (; i < rows.Length; i++)
{
oneRow=rows[i].Trim();//空行
if (0 ==oneRow.Length)continue;//此行为注释
if (';' == oneRow[0])continue;//越界
if ('[' == oneRow[0])break;
strLeft= Split(oneRow, "=");if (strLeft == null || strLeft.Length != 2)continue;//找到属性
if (strLeft[0].Trim() ==KeyName)
{//读
if(isRead)
{//c.找到属性但没有值
if (0 == strLeft[1].Trim().Length)
{
rows[i]= strLeft[0].Trim() + "=" +Default;
WriteArray(FileName, rows);returnDefault;
}else{//找到了
return strLeft[1].Trim();
}
}//写
else{
rows[i]= strLeft[0].Trim() + "=" +Default;
WriteArray(FileName, rows);returnDefault;
}
}
}//d.没找到对应的属性,创建之并赋为默认
rows[bakIdxSection] = rows[bakIdxSection] + "\r\n" + KeyName + "=" +Default;
WriteArray(FileName, rows);returnDefault;
}
}