无论是.net框架集还是.net精简框架集都能非常完美的支持XML文件,并且微软也强烈建议用xml文件取代ini文件,但是在工控领域大部分的工程都是采用ini文件配置的系统信息的。
以前的隧道管理系统是采用ini文件配置信息的,为了实现兼容,只好在下位机也采用ini文件配置信息。由于WinCE平台不提供ini文件读取的api函数GetPrivateProfileString,所以需要自行编写,前一段时间提供了一个EVC版本的ini文件读取,后来在DA66x的WinCE平台上全部采用C#编程,所以不得以需要开发一个C#版本的ini读取函数。
这是我在原有项目代码的基础上摘编的一个ini读取函数。
//
读取INI文件;
private
string
GetPrivateProfileString(
string
ApplicationName,
string
KeyName,
string
Default,
string
FileName) {
string
[] iniItems
=
new
string
[
0
];
string
iniLines;
string
iniLine;
int
i, j;
try
{
//
读取INI文件;
System.IO.StreamReader iniFile
=
new
System.IO.StreamReader(FileName, System.Text.Encoding.Default); iniLines
=
iniFile.ReadToEnd(); iniFile.Close(); }
catch
{
return
Default; }
//
以回车符分割,得到每一行
iniItems
=
iniLines.Split(
'
'
);
//
遍历每一行
for
(i
=
0
; i
<
iniItems.GetLength(
0
); i
++
) {
//
找到匹配值
if
(iniItems[i].Trim().ToUpper()
==
'
[
'
+
ApplicationName.Trim().ToUpper()
+
'
]
'
) {
//
从下一行开始搜索
for
(j
=
i
+
1
; j
<
iniItems.GetLength(
0
); j
++
) { iniLine
=
iniItems[j].Trim();
if
(iniLine.Length
>
0
) {
//
如果找到了另一个段,那么就越段了,则返回默认值
if
(iniLine[
0
]
==
'
[
'
&&
iniLine[iniLine.Length
-
1
]
==
'
]
'
)
return
Default; }
//
去掉所有空格
iniLine
=
iniItems[j].TrimStart().Replace(
"
"
,
""
);
if
(iniLine.Substring(
0
, Math.Min(KeyName.Length
+
1
, iniLine.Length)).ToUpper()
==
KeyName.ToUpper()
+
"
=
"
) {
//
如果找到了Key匹配
return
iniItems[j].Substring(iniItems[j].IndexOf(
'
=
'
)
+
1
); } }
return
Default;
//
没有找到key匹配的,则返回默认值
} }
return
Default;
//
返回默认值
}