C# 搜索rasphone pbk文件

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)) {

在我的应用程序中,当我的应用程序启动时,我使用rasphone函数连接到vpn,它使用此代码在一个组合框中获取所有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;
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?