如何在C#中从末尾读取一个非常大的文件

本文关键字:一个 非常 文件 读取 | 更新日期: 2023-09-27 18:19:58

我有一个4.5GB大小的文本文件,它是由一个实验应用程序创建的。在我的8GB RAM系统上,无法打开此文件(尝试使用高级文本)。我只想从末尾读取该文件的内容,比如说从末尾读取45个字符,而不将整个文件加载到内存中。如何做到这一点?像这样的内置方法

StreamReader.ReadBlock(char[] buffer,int index,int count)  

索引的类型为int,但我的情况下的索引超出了int值的范围。如果有一个过载与长。如何克服这一点?谢谢

如何在C#中从末尾读取一个非常大的文件

Stream具有名为PositionLengthlong属性。您可以将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),然后才能找到你想要读取的位置。