我在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#中获得文件结尾的完整结果吗?
答案 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方法。