文本解析挂起

时间:2011-03-16 05:09:40

标签: wpf while-loop

您好我有以下代码:

        private void Textparsing()
        {               
            using (StreamReader sr = new StreamReader(Masterbuildpropertiespath))                 
            {                    
                String line;
                line = sr.ReadLine();
                while ((line != null))
                {
                    if (line.StartsWith("Exec_mail"))
                    {
                        ExecmailCheckBox.IsChecked = true;
                    }
                }                 
            }
}

当我使用此功能时,似乎应用程序只是挂起而没有做任何事情。这里的while循环有问题吗?

编辑1:

我现在使用的代码有错误:'System.IO.StreamReader'不包含'Readline'的定义,并且没有扩展方法'Readline'接受'System.IO.StreamReader'类型的第一个参数可能找到了

代码:

        private void Textparsing()
        {               
            using (StreamReader sr = new StreamReader(Masterbuildpropertiespath))                 
            {                    
                    while (sr.Peek() >= 0)
                    {
                        if (sr.Readline().StartsWith("Exec_mail"))
                        {
                            ExecmailCheckBox.IsChecked = true;
                        }
                    }              
            }               
}

错误在此行中找到:

if (sr.Readline().StartsWith("Exec_mail"))

1 个答案:

答案 0 :(得分:0)

使用StreamReader.Peek()确定文件结尾:

private void Textparsing()
{
    using (StreamReader sr = new StreamReader(Masterbuildpropertiespath))
    {
        while (sr.Peek()>=0)              
        {
            if (sr.ReadLine().StartsWith("Exec_mail"))
            {
                ExecmailCheckBox.IsChecked = true;   
            }
        }
    }
}

修改

我使用位于D:\ aa.txt的示例文本文件运行代码,其中包含4行文本:
Exec_mail
ABCD
Exec_mail
EFGH
Exec_mail

使用此代码:

private void Textparsing()
{
    using (StreamReader sr = new StreamReader(@"D:\aa.txt")) 
    {
        while (sr.Peek() >= 0)
        { 
            if (sr.ReadLine().StartsWith("Exec_mail")) 
            {
                MessageBox.Show("yes");
            } 
        } 
    } 
}

它显示了三次。