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

时间:2011-10-20 16:00:20

标签: c# readline eof

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

示例简化

sometext1...
sometext2...
[new]
sometext3...
[new]
sometext4...
sometext5...
[new]
sometext6...
sometext7...

想要我想要的回归是最后写的部分

[new]
sometext6...
sometext7...

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

3 个答案:

答案 0 :(得分:3)

var text =  File.ReadAllText(theFile);
var tail = text.SubString(text.LastIndexOf("[New]"));

答案 1 :(得分:3)

假设:

  1. [new]总是在自己的路线上。
  2. 没有一条线都很大。
  3. 每个块都相当小(本身并不是一个巨大的内存负担)。
  4. 文件可能非常大,因此您不希望将整个内容读入内存。
  5. 然后我会做以下事情。改变前三个假设,它变得更棘手,改变第四个,我会变得懒惰,只是加载整个东西:

    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();
    }
    

答案 2 :(得分:1)

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