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

本文关键字:读取 文件 filestream streamreader 使用 | 更新日期: 2023-09-27 17:50:24

我有一个文件,其中包含数据,我想将其读取为byte[]并分为3个块。第一行可能被读取为字符串,然后第二个块,可能是1-3行的长度,所有左侧字节作为块3。

我在想,我怎么能得到block 1和block 2将是由byte[]组成的字符串,block 3将保持byte[]。

文件:

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

我正在尝试做文件流。读取(bytes, 0, file.length),但它只读取所有字节。

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

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

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

您可以读取所有字节并遍历缓冲区搜索行结尾。当您发现行结束时,将textpart转换为

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

注。确保使用精确的编码…

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

[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[] lines = File.ReadAllLines("filename");