如何在C#中从末尾读取一个非常大的文件
本文关键字:一个 非常 文件 读取 | 更新日期: 2023-09-27 18:19:58
我有一个4.5GB大小的文本文件,它是由一个实验应用程序创建的。在我的8GB RAM系统上,无法打开此文件(尝试使用高级文本)。我只想从末尾读取该文件的内容,比如说从末尾读取45个字符,而不将整个文件加载到内存中。如何做到这一点?像这样的内置方法
StreamReader.ReadBlock(char[] buffer,int index,int count)
索引的类型为int,但我的情况下的索引超出了int值的范围。如果有一个过载与长。如何克服这一点?谢谢
Stream
具有名为Position
和Length
的long
属性。您可以将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),然后才能找到你想要读取的位置。