C# 如何在textfile中再获得两行

C# 如何在textfile中再获得两行,c#,C#,我有下面的代码我想这一行和下面的2行如何做这任何想法。请帮忙,我要最后一个号码,请看下面的文字 static void Main() { int counter = 0; string line; StringBuilder sb = new StringBuilder(); using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt")) {

我有下面的代码我想这一行和下面的2行如何做这任何想法。请帮忙,我要最后一个号码,请看下面的文字

static void Main()
{
    int counter = 0; string line;
    StringBuilder sb = new StringBuilder();

    using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt"))
    {
        while ((line = file.ReadLine()) != null)
        {
            if (line.Contains(DateTime.Now.Date.ToShortDateString()))
            {         
                sb.AppendLine(line.ToString());
            }
        }
    }

    Console.WriteLine(sb.ToString());
    Console.ReadKey();
}
*****来电:2016年4月25日-11:45****

名称:测试

电话:(425)555-1212

*****来电:2016年4月25日-11:45****

名称:Test2


NUMBER:(425)544-1213

只需再调用file.ReadLine两次,但检查返回的字符串是否为null很重要,因为您可能会到达文件的意外结尾,并且您的代码不再受while条件中检查的保护

...
using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt"))
{
    while ((line = file.ReadLine()) != null)
    {
        if (line.Contains(DateTime.Now.Date.ToShortDateString()))
        {

            sb.AppendLine(line);
            line = file.ReadLine();
            if(line != null) sb.AppendLine(line);
            line = file.ReadLine();
            if(line != null) sb.AppendLine(line);
        }
    }
}
如果只想获得最后三行(假设文件格式良好),则可以在循环中添加StringBuilder的重置

using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt"))
{
    while ((line = file.ReadLine()) != null)
    {
        if (line.Contains(DateTime.Now.Date.ToShortDateString()))
        {
            // This will remove the previous data and keep 
            // just the last three lines.....
            sb.Length = 0;
            sb.AppendLine(line);
            line = file.ReadLine();
            if(line != null) sb.AppendLine(line);
            line = file.ReadLine();
            if(line != null) sb.AppendLine(line);
        }
    }
}
作为替代方案,但我不确定从性能角度来看这是否是一个好主意(特别是如果我们谈论的是一个大文件),我们可以这样使用linq

string result = string.Join(Environment.NewLine, 
                File.ReadLines(@"E:\file\log.txt").Reverse().Take(3));
static void Main()
{
int计数器=0;字符串行;
List ss=新列表();
使用(System.IO.StreamReader file=new System.IO.StreamReader(@“E:\file\log.txt”))
{
而((line=file.ReadLine())!=null)
{
if(line.Contains(DateTime.Now.Date.ToShortDateString()))
{
ss.添加(行);
line=file.ReadLine();
如果(行!=null)
ss.添加(行);
line=file.ReadLine();
如果(行!=null)
ss.添加(行);
}
}
}
var item=ss.LastOrDefault();
字符串编号=项。子字符串(0,24)。替换(“编号:”,“”)。修剪();
控制台写入线(编号);
Console.ReadKey();
}

我想要最后一个如何得到这个对不起,我不明白你的评论
 static void Main()
        {
            int counter = 0; string line;

            List<string> ss = new List<string>();
            using (System.IO.StreamReader file = new System.IO.StreamReader(@"E:\file\log.txt"))
            {
                while ((line = file.ReadLine()) != null)
                {

                    if (line.Contains(DateTime.Now.Date.ToShortDateString()))
                    {
                        ss.Add(line);                     
                        line = file.ReadLine();
                        if (line != null)

                            ss.Add(line);
                        line = file.ReadLine();
                        if (line != null)                           
                            ss.Add(line);

                    }
                }
            }

            var item = ss.LastOrDefault();            
            string number = item.Substring(0, 24).Replace("NUMBER:", "").Trim();
            Console.WriteLine(number);
            Console.ReadKey();
}