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

本文关键字:取文本 文件 EOF 读取 位置 定位 | 更新日期: 2023-09-27 18:11:57

试图找到一种读取文本文件的好方法,并找到某个短语的最后一个实例,并从该点读取文件到末尾。

简化的例子

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

Want i Want return is last part written

[new]
sometext6...
sometext7...
我能想到做这件事的方法,但我肯定有一种非常有效的方法。猜测必须找到"[new]"的最后一个索引,并从那里读取。

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

假设:

  1. [new]总是在它自己的行上。
  2. 每个块都相当小(本身不是很大的内存负担)。
  3. 文件可能非常大,所以你不想把整个文件都读到内存中。

那么我将执行以下操作。改变前三个假设,这会变得更棘手,改变第四个假设,我就会偷懒,直接把整个东西加载进去:

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();
}
var text =  File.ReadAllText(theFile);
var tail = text.SubString(text.LastIndexOf("[New]"));

你可以打开一个文件流,将它封装到TextReader中,然后在FileStream实例中保存Position属性的值。它允许你保存[new]标记的位置