好吧,你必须自己找出你的特殊情况的魔法。如果您要使用众所周知的文本编码,它可能非常简单。查看 System.IO.StreamReader 和它的 ReadLine()、DiscardBufferedData() 方法和 BaseStream 属性。您应该能够记住您在文件中的最后一个位置并稍后回到该位置并再次开始阅读,因为您确定该文件只是附加的。不过,还有其他事情需要考虑,对此没有统一的通用答案。
就像一个天真的例子(您可能仍然需要进行很多调整才能使其正常工作):
static void Main(string[] args)
{
string filePath = @"c:\log.txt";
using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
using (var streamReader = new StreamReader(stream,Encoding.Unicode))
{
long pos = 0;
if (File.Exists(@"c:\log.txt.lastposition"))
{
string strPos = File.ReadAllText(@"c:\log.txt.lastposition");
pos = Convert.ToInt64(strPos);
}
streamReader.BaseStream.Seek(pos, SeekOrigin.Begin); // rewind to last set position.
streamReader.DiscardBufferedData(); // clearing buffer
for(;;)
{
string line = streamReader.ReadLine();
if( line==null) break;
ProcessLine(line);
}
// pretty sure when everything is read position is at the end of file.
File.WriteAllText(@"c:\log.txt.lastposition",streamReader.BaseStream.Position.ToString());
}
}
}