A Stream
具有long
特性Position
和Length
。您可以将Position
设置为[0, Length[
范围内的任意值,如fileStream.Position = fileStream.Length - 45;
。
或者,您可以使用Stream.Seek
函数:fileStream.Seek(-45, SeekOrigin.End)
。
根据周围的代码和情况,使用可读性更强的文档,这是最能表达您意图的文字。
下面是一些代码:
using (var fileStream = File.OpenRead("myfile.txt"))
using (var streamReader = new StreamReader(fileStream, Encoding.ASCII))
{
if (fileStream.Length >= 45)
fileStream.Seek(-45, SeekOrigin.End);
var value = streamReader.ReadToEnd(); // Last 45 chars;
}
这是容易,因为你知道你的文件在ASCII编码。否则,您必须从读取文件的开头读取一些文本,让其检测编码(如果存在BOM),然后才能找到您想要读取的位置。
去oldschool? FOPEN/FSEEK? – 2014-08-29 19:36:50
['FileStream.Seek(long offset,SeekOrigin origin)'](http://msdn.microsoft.com/en-us/library/system.io.filestream.seek(v = vs.110).aspx)? Darin Dimitrov显示了一个示例如何执行此操作:http://stackoverflow.com/questions/4368857/read-from-a-file-starting-at-the-end-similar-to-tail – birryree 2014-08-29 19:37:23
什么编码是文本文件在?如果是UTF-8,你能保证文件中只有单字节宽字符吗? – 2014-08-29 19:40:39