1、读取tnsnames.ora的配置中的key
1)通过Split方法
public static List<string> ReadTextFile(string FP)
{
string inputString;
List<string> List = new List<string>();
try
{
StreamReader streamReader = File.OpenText(FP.Trim()); // FP is the filepath of TNS file
inputString = streamReader.ReadToEnd();
string[] temp = inputString.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
for (int i = 0; i < temp.Length; i++)
{
if (temp[i].Trim(' ', '(').Contains("DESCRIPTION"))
{
string DS = temp[i - 1].Trim('=', ' ');
List.Add(DS);
}
}
streamReader.Close();
}
catch (Exception ex)
{
throw ex;
}
return List;
}
2)通过Stack
public static string[] GetDatabases()
{
#region 读取TNS文件
string output = "";
string fileLine;
Stack parens = new Stack();
StringBuilder stringBuilder = new StringBuilder();
// open tnsnames.ora
StreamReader sr;
try
{
sr = new StreamReader(@"tnsnames.ora");
}
catch (System.IO.FileNotFoundException ex)
{
throw ex;
}
#endregion
// 读取文件的第一行
fileLine = sr.ReadLine();
string[] t = null;
#region
// 循环,读取每一行
while (fileLine != null)
{
// 如行的第一个字符为“#”忽略这一行。直接读下一行。
if (fileLine.Length > 0 && fileLine.Trim().Substring(0, 1) != "#")
{
// Read through the input line character by character
char lineChar;
for (int i = 0; i < fileLine.Length; i++)
{
lineChar = fileLine[i];
if (lineChar == '(')
{
// 如果第一个字符是 "(" 整行放入 堆栈。
parens.Push(lineChar);
}
else if (lineChar == ')')
{
// if the char is a ), pop the stack 如果字符是")",一个一个移出 (注:POP可在 Stack 的顶部移除一个元素)
parens.Pop();
}
else
{
if (parens.Count == 0)
{
output += lineChar;
}
}
}
}
fileLine = sr.ReadLine();
}
// Close the stream reader
sr.Close();
#endregion
#region 处理=号
//
string[] split = output.Split('=');
// 以"="号为分隔符。截掉,放入split内
for (int i = 0; i < split.Length; i++)
{
split[i] = split[i].Trim();
}
Array.Sort(split);
return split;
#endregion
}
2、读取tnsnames.ora的配置中的key和value
public static Dictionary<string, string> GetDatabases()
{
#region 读取TNS文件
string output = "";
string fileLine;
Stack parens = new Stack();
Dictionary<string, string> keyValues = new Dictionary<string, string>();
StringBuilder stringBuilder = new StringBuilder();
// open tnsnames.ora
StreamReader sr;
try
{
sr = new StreamReader(@"tnsnames.ora");
}
catch (System.IO.FileNotFoundException ex)
{
throw ex;
}
#endregion
// 读取文件的第一行
fileLine = sr.ReadLine();
string[] t = null;
#region
// 循环,读取每一行
while (fileLine != null)
{
// if the first non whitespace character is a #, ignore the line
// and go to the next line in the file 如行的第一个字符为“#”忽略这一行。直接读下一行。
if (fileLine.Length > 0 && fileLine.Trim().Substring(0, 1) != "#")
{
// Read through the input line character by character
char lineChar;
for (int i = 0; i < fileLine.Length; i++)
{
lineChar = fileLine[i];
if (lineChar == '(')
{
// //如果第一个字符是 "(" 整行放入 堆栈。
parens.Push(lineChar);
}
else if (lineChar == ')')
{
// 如果字符是")",一个一个移出 (注:POP可在 Stack 的顶部移除一个元素)
parens.Pop();
}
else
{
if (parens.Count == 0)
{
if (stringBuilder.Length > 0)
{
t = output.Split('=');
keyValues.Add((t.Length>2?t[t.Length-2]:t[0]).Trim(), stringBuilder.ToString());
stringBuilder.Clear();
}
output += lineChar;
}
}
}
if (fileLine.IndexOf("(") > -1 || fileLine.IndexOf(")") > -1)
{
stringBuilder.Append(fileLine);
}
}
fileLine = sr.ReadLine();
}
// Close the stream reader
sr.Close();
return keyValues;
#endregion
}