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]"的最后一个索引,并从那里读取。
假设:
- [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();
}
var text = File.ReadAllText(theFile);
var tail = text.SubString(text.LastIndexOf("[New]"));
你可以打开一个文件流,将它封装到TextReader中,然后在FileStream实例中保存Position属性的值。它允许你保存[new]标记的位置