搜索rasphone pbk文件

时间:2014-06-27 11:28:08

标签: c# .net vpn

在我的应用程序中,我使用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

3 个答案:

答案 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