使用 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");
我有一个文件,里面有数据,我想把它读成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");