在我的应用程序中,我使用rasphone功能连接到vpn's当我的应用程序启动时,它使用此代码获取组合框中的所有vpn连接。
String f = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Microsoft\Network\Connections\Pbk\rasphone.pbk";
if (System.IO.File.Exists(f))
{
List<string> lines = new List<string>();
using (StreamReader r = new StreamReader(f))
{
string line;
while ((line = r.ReadLine()) != null)
{
lines.Add(line);
}
}
foreach (string s in lines)
{
if (s.StartsWith("["))
{
char[] MyChar = { ']' };
string NewString = s.TrimEnd(MyChar);
char[] MyChar2 = { '[' };
string NewString2 = NewString.TrimStart(MyChar2);
comboBox1.Items.Add(NewString2);
}
}
}
else
{
MessageBox.Show("PBK File not found.");
}
comboBox1.Sorted = true;
现在我的问题是如何让phonenumer =部分显示在文本框或标签中,所以我知道IP是什么。
pbk文件看起来像这样(必须删除一些行),问题是我在pbk文件中有多个vpn连接,所以多个phonenumer =条目。
[VPN Name of connection]
Encoding=1
PBVersion=3
Type=2
DEVICE=vpn
PhoneNumber= 0.0.0.0 <- ip address I want to display in a label or textbox.
AreaCode=
CountryCode=0
CountryID=0
UseDialingRules=0
Comment=
FriendlyName=
LastSelectedPhone=0
PromoteAlternates=0
TryNextAlternateOnFail=1
答案 0 :(得分:1)
如果您正在寻找一个非常简单的解决方案并且我正确理解您的问题,那么应该这样做,在您的if
声明中的当前foreach
之后添加以下声明
else if(str.Contains("PhoneNumber"))
{
var x = str.Split('=');
if(x.Length > 1)
ip = x[1];
}
请注意ip
是您要存储IP地址的变量。
要在评论中回答您的问题并假设您在每个PhoneNumber条目之前始终有[VPN-Connection],您可以写这样的内容
foreach (string s in lines)
{
if (s.StartsWith("["))
{
char[] MyChar = { ']' };
string NewString = s.TrimEnd(MyChar);
char[] MyChar2 = { '[' };
string NewString2 = NewString.TrimStart(MyChar2);
comboBox1.Items.Add(NewString2);
}
else if (s.Contains("PhoneNumber"))
{
string ip = comboBox1.Items[comboBox1.Items.Count - 1].ToString() + " : ";
var x = s.Split('=');
if (x.Length > 1)
ip += x[1];
}
}
这会得到最后添加到组合框中的项目并将其放在ip地址的字符串之前,仍然只是一个简单的黑客但它是一种方法来做它...如果你有更高级的需求我会做用于存储所需数据的类,并从中填充组合框。
答案 1 :(得分:0)
好。你可以阅读文件内容并使用正则表达式来提取
PhoneNumber=(?<ip>[^\n]+)
答案 2 :(得分:0)
您可以p / invoke RasGetEntryProperties
将pbk文件传递给它,或者您只需解析文本文件中的值即可。它采用INI格式,那里有很多INI File reader classes。