C# 搜索rasphone pbk文件
在我的应用程序中,当我的应用程序启动时,我使用rasphone函数连接到vpn,它使用此代码在一个组合框中获取所有vpn连接C# 搜索rasphone pbk文件,c#,.net,vpn,C#,.net,Vpn,在我的应用程序中,当我的应用程序启动时,我使用rasphone函数连接到vpn,它使用此代码在一个组合框中获取所有vpn连接 String f = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + @"\Microsoft\Network\Connections\Pbk\rasphone.pbk"; if (System.IO.File.Exists(f)) {
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;
String f=Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)+@“\Microsoft\Network\Connections\Pbk\rasphone.Pbk”;
if(System.IO.File.Exists(f))
{
列表行=新列表();
使用(StreamReader r=新StreamReader(f))
{
弦线;
而((line=r.ReadLine())!=null)
{
行。添加(行);
}
}
foreach(行中的字符串s)
{
如果(s.StartsWith(“[”))
{
char[]MyChar={']};
字符串NewString=s.TrimEnd(MyChar);
char[]MyChar2={'['};
字符串NewString2=NewString.TrimStart(MyChar2);
comboBox1.Items.Add(NewString2);
}
}
}
其他的
{
Show(“未找到PBK文件”);
}
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
[连接的VPN名称]
编码=1
PBVersion=3
类型=2
设备=vpn
PhoneNumber=0.0.0.0如果您正在寻找一个非常简单的解决方案,并且我正确地理解了您的问题,这应该可以解决问题,请在您的foreach
语句中当前If
之后添加以下语句
else if(str.Contains("PhoneNumber"))
{
var x = str.Split('=');
if(x.Length > 1)
ip = x[1];
}
请注意,ip
是要存储ip地址的变量
要回答评论中的问题,并假设您在输入每个电话号码之前都有[VPN连接],您可以这样写
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地址字符串之前,这仍然只是一个简单的破解,但这是一种方法。如果您有更高级的需要,我将创建一个类来存储您需要的数据,并从中填充组合框。好的。您可以读取文件内容并使用r用egex提取
PhoneNumber=(?<ip>[^\n]+)
电话号码=(?[^\n]+)
您可以p/invoke将pbk文件传递给它,或者您可以简单地从文本文件中解析出值。它是INI格式的,有很多种格式。我如何做到这一点,以便它在给定的[vpn连接]后开始在pbk文件中搜索Phonenumber=iPAddress?