C#将文本文件从特定位置读取到EOF

C#将文本文件从特定位置读取到EOF,c#,readline,eof,C#,Readline,Eof,试图找到一种阅读文本文件的好方法,找到某个短语的最后一个实例,并从该点开始将文件读到最后 简化示例 sometext1... sometext2... [new] sometext3... [new] sometext4... sometext5... [new] sometext6... sometext7... “我要退货”是最后一部分 [new] sometext6... sometext7... 我可以想办法做到这一点,但我相信有一个非常有效的方法。 猜测必须找到“[new]”的最后

试图找到一种阅读文本文件的好方法,找到某个短语的最后一个实例,并从该点开始将文件读到最后

简化示例

sometext1...
sometext2...
[new]
sometext3...
[new]
sometext4...
sometext5...
[new]
sometext6...
sometext7...
“我要退货”是最后一部分

[new]
sometext6...
sometext7...
我可以想办法做到这一点,但我相信有一个非常有效的方法。
猜测必须找到“[new]”的最后一个索引并从中读取。

您可以打开一个文件流,将其包装到TextReader中,然后将Position属性的值保存在FileStream实例中。它允许您保存[新]令牌的位置。

假设:

var text =  File.ReadAllText(theFile);
var tail = text.SubString(text.LastIndexOf("[New]"));
  • [新]总是有自己的路线
  • 没有一条线是巨大的
  • 每个块都相当小(本身并不是一个巨大的内存负担)
  • 文件可能非常大,因此您不想将整个内容读入内存
  • 然后我会做下面的事情。改变前三个假设,事情会变得更棘手,改变第四个假设,我会很懒,只是把整个事情都装进去:

    using(TextReader tr = new StreamReader(filePath))
    {
        StringBuilder sb = new StringBuilder();
        for(string line = tr.ReadLine(); line != null; line = tr.ReadLine())
            if(line == "[new]")
                sb = new StringBuilder("[new]");//flush last chunk read.
            else
                sb.Append('\n').Append(line);
        return sb.ToString();
    }
    

    你能展示一下你为解决这个问题而试图写的代码吗?这个文件有多大?它必须有多快?短语总是只有一行吗?下面Jon的sanwser就像我需要的那样工作。这很接近,但索引只针对第1行。没有处理换行和返回字符。谢谢工作完美。它只是一个真正简单的文本文件(日志),只想显示最后一个条目。谢谢