如何在c#中读取文件的结尾?

时间:2018-01-27 03:43:20

标签: c# file

我在stackoverflow中搜索并获得了一种方法,但这种方法只允许我在控制台中逐字逐句编写。我的目标是获取我的文件的结尾,但得到完整的结果而不是char的char。

此代码仅显示我的文件末尾的char:

using (var reader = new StreamReader("file.dll")
{
    if (reader.BaseStream.Length > 1024)
    {
        reader.BaseStream.Seek(-1024, SeekOrigin.End);
    }

    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
        Console.ReadKey();
    }
}

我试图得到这样的东西,它是c ++,但我试图在c#中获得相同的结果。

QFile *archivo;
archivo = new QFile();
archivo->setFileName("file.dll");
archivo->open(QFile::ReadOnly);
archivo->seek(archivo->size() - 1024);
trama = archivo->read(1024);

我可以在c#中获得文件结尾的完整结果吗?

1 个答案:

答案 0 :(得分:2)

如果文件是以行分隔的文本文件,则可以使用ReadAllLines

string[] lines = System.IO.File.ReadAllLines("file.txt");

如果是二进制文件,您可以使用ReadAllBytes。震惊,我知道。

byte[] data = System.IO.File.ReadAllBytes("file.dll");

如果您希望能够首先搜索(例如,如果您只想要文件的最后1024个字节),则可以使用流的Read方法。再一次,疯了。

reader.BaseStream.Seek(-1024, SeekOrigin.End);
var chars = new char[1024];
reader.Read(chars, 0, 1024);

在您提出问题之前,您可以通过将字符传递给构造函数来将字符转换为字符串:

char[] chars = new char[1024];
string s = new string(chars);
Console.WriteLine(s);

不确定它会是什么样子,因为你正在从二进制文件中读取字符,但祝你好运。我的猜测是你应该读取字节而不是:

reader.BaseStream.Seek(-1024, SeekOrigin.End);
var bytes = new byte[1024];
reader.BaseStream.Read(bytes, 0, 1024);

(请注意,您甚至不需要StreamReader,因为FileStream(您的基本流)公开了您需要的Read方法。