使用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块,以获得确切的块大小。
您可以读取所有字节并遍历缓冲区搜索行结尾。当您发现行结束时,将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");