使用 filestream 和 streamreader 在 c# 中读取文件

Reading files in c# with filestream and streamreader

我有一个文件,里面有数据,我想把它读成byte[],分成3块。第一行可能被读取为字符串,然后是第二个块,可能是 1-3 行长度,所有左侧字节都作为块 3。

我想知道,我怎样才能得到块 1 和块 2 是由 byte[] 组成的字符串,块 3 将保留字节 []。

文件:

00256000 12      // block 1 single line
a2#b2#c2#d2#e2#  //
1#               //  block 2 readline doesn't fit, unknown length of lines
1#               //
—q3л             // block 3 left bytes

我试图做 FileStream.Read(bytes, 0, file.length),但它只读取所有字节。

StreamReader.ReadLine() 仅适用于第一行,但它读取的是纯字符串,而不是字节,它会跳过 '\n' 、 '\r' 等

我不知道哪种方式更适合读取文件,读取所有字节并以某种方式将它们分成这 3 个块以获得精确的块大小是完美的。

用你想要的数据成员创建一个class,将其标记为serializable,然后序列化数据(即将其保存到文件)并在你需要数据时反序列化它。

[Serializable()]
public class Data1
{
    public Data1()
    {
    }

    public String[] Block { get; set; }
}

要在保存后加载该数据,请使用如下技术:

public Data1 Load(string filename)
{
    if (System.IO.File.Exists(filename))
    {
        using (var stream = System.IO.File.OpenRead(filename))
        {
            var deserializer = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
            return deserializer.Deserialize(stream) as Data1;
        }
    }
    return null;
}

虽然我不会为你做这一切!您需要研究如何序列化 Data1.

的实例

您可以读取所有字节并遍历缓冲区以查找行尾。当您找到行尾时,将文本部分转换为

string text = Encoding.UTF8.GetString(buffer, start_len, end_len);

p.s。一定要使用准确的编码...以 UTF8 为例...

读取小文件有很方便的方法,就是returns行数组。

string[] lines = File.ReadAllLines("filename");