C# 读取二进制文件并使用新行作为分隔符来创建二进制块

C# 读取二进制文件并使用新行作为分隔符来创建二进制块,c#,C#,当涉及到二进制文件时,我完全不懂。我需要读取一个二进制文件,并使用新行作为分隔符将其分解成块。我试过用谷歌搜索这个,但结果是空的。在此方面的任何帮助都将不胜感激。它必须作为二进制文件打开 所以我有一个未知编码的文件。我需要使用\n换行符作为分隔符,按块分隔文件。我正在寻找一个函数,它可以用新行作为分隔符来分隔二进制数据。流本质上是面向字节的。您可以一次将一个字节读入缓冲区,直到遇到换行符,然后创建一个新的缓冲区来读入。流本质上是面向字节的。您可以一次将一个字节读入缓冲区,直到遇到换行符,然后创建

当涉及到二进制文件时,我完全不懂。我需要读取一个二进制文件,并使用新行作为分隔符将其分解成块。我试过用谷歌搜索这个,但结果是空的。在此方面的任何帮助都将不胜感激。它必须作为二进制文件打开


所以我有一个未知编码的文件。我需要使用
\n
换行符作为分隔符,按块分隔文件。我正在寻找一个函数,它可以用新行作为分隔符来分隔二进制数据。

流本质上是面向字节的。您可以一次将一个字节读入缓冲区,直到遇到换行符,然后创建一个新的缓冲区来读入。

流本质上是面向字节的。您可以一次将一个字节读入缓冲区,直到遇到换行符,然后创建一个新的缓冲区来读入。

Helper方法 帮助者方法
首先,您必须验证新行是什么意思-它可以是:\n\n\r或\r\n。 当您确定了换行符的概念后,您应该读取二进制文件字节,并检查字节序列是否包含与我上面提到的字符等价的字节

例如,如果您有单字节,您可以按如下方式检查它:

byte singleByte = 1; //this value will be read from stream
if (singleByte == (byte) '\n')
{
    //your code goes here
}

首先,您必须验证新行是什么意思-它可以是:\n\n\r或\r\n。 当您确定了换行符的概念后,您应该读取二进制文件字节,并检查字节序列是否包含与我上面提到的字符等价的字节

例如,如果您有单字节,您可以按如下方式检查它:

byte singleByte = 1; //this value will be read from stream
if (singleByte == (byte) '\n')
{
    //your code goes here
}

首先,如果文件中混合了二进制和文本数据,而您不知道如何解包,那么您就有麻烦了

第二,你说的“新线”到底是什么意思?这些新行是否作为
0x10
专门写入二进制文件?或者您使用的.Net接口上有类似于
WriteLine
的方法?或者你在这个文件中写了一些包含换行符的文本?在这种情况下,使用了什么编码

如果您将这些换行符写成
0x10
,您应该能够不太困难地找出如何在单个字节上拆分二进制流

如果您使用了
WriteLine
或类似工具,这意味着它实际上编写了
Environment.NewLine
而不仅仅是
0x10
。在大多数情况下,在windows计算机上,这意味着您正在查找
0x1310
。如果您不在前面修剪
0x13
,则在每个段的末尾都会有一个额外的垃圾字节


现在,如果您使用特定编码编写字符串,这意味着换行符实际上是
0x10
0x00010
0x00000010
环境。换行符是
0x1310
0x00130010
0x0000001300000010
,因此您应该在这些值上进行拆分。哦,endian ness会翻转所有这些…

首先,如果文件中混合了二进制和文本数据,而您不知道如何解包,那么您就有麻烦了

第二,你说的“新线”到底是什么意思?这些新行是否作为
0x10
专门写入二进制文件?或者您使用的.Net接口上有类似于
WriteLine
的方法?或者你在这个文件中写了一些包含换行符的文本?在这种情况下,使用了什么编码

如果您将这些换行符写成
0x10
,您应该能够不太困难地找出如何在单个字节上拆分二进制流

如果您使用了
WriteLine
或类似工具,这意味着它实际上编写了
Environment.NewLine
而不仅仅是
0x10
。在大多数情况下,在windows计算机上,这意味着您正在查找
0x1310
。如果您不在前面修剪
0x13
,则在每个段的末尾都会有一个额外的垃圾字节


现在,如果您使用特定编码编写字符串,这意味着换行符实际上是
0x10
0x00010
0x00000010
环境。换行符是
0x1310
0x00130010
0x0000001300000010
,因此您应该在这些值上进行拆分。哦,endian ness会翻转所有这些…

如果其中一个数据块包含换行符会发生什么?例如,如果整数的值为10,则可能发生这种情况。需要对文件内容进行更多的描述。否则,您的问题就没有任何意义了。数据块都是数字,使用换行符作为分隔符。通信接口就是这样给我的。“数据块都是数字”是否意味着它们是数字字符串,如“94732”和“3401”等?它们被新线隔开了?看起来你有一个文本文件,每行一个数字。如果是这种情况,请使用
StreamReader
逐行读取。如果其中一个数据块包含换行符,会发生什么情况?例如,如果整数的值为10,则可能发生这种情况。需要对文件内容进行更多的描述。否则,您的问题就没有任何意义了。数据块都是数字,使用换行符作为分隔符。通信接口就是这样给我的。“数据块都是数字”是否意味着它们是数字字符串,如“94732”和“3401”等?它们被新线隔开了?看起来你有一个文本文件,每行一个数字。如果是这种情况,请使用
StreamReader
逐行读取。根据文件的写入方式,结果列表中会出现垃圾填充。@flyingstrudel然后可以在查询中添加
.TakeWhile(chunk=>chunk.Any())
行或类似的内容。愚蠢的批评——答案显然是提供了问题的实质(
SplitOn
metro
byte singleByte = 1; //this value will be read from stream
if (singleByte == (byte) '\n')
{
    //your code goes here
}