如何在逐字节读取CSV文件时检测字节是否为换行符-C#

如何在逐字节读取CSV文件时检测字节是否为换行符-C#,c#,arrays,csv,byte,filestream,C#,Arrays,Csv,Byte,Filestream,我需要逐字节读取CSV文件(注意:我不想逐行读取)。 如何检测读取的字节是否为换行符? 如何知道到达了终点线 int count = 0; byte[] buffer = new byte[MAX_BUFFER]; using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read)) { // Read bytes form file until the next l

我需要逐字节读取CSV文件(注意:我不想逐行读取)。 如何检测读取的字节是否为换行符? 如何知道到达了终点线

int count = 0;
byte[] buffer = new byte[MAX_BUFFER];

using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{              
    // Read bytes form file until the next line break -or- eof 
    // so we don't break a csv row in the middle

    // What should be instead of the 'xxx' ?

    while (((readByte = fs.ReadByte()) != 'xxx') && (readByte != -1))
    {
        buffer[count] = Convert.ToByte(readByte);
        count++;
    }
} 

新行字符具有十进制值
10
或十六进制值
0xA
。为了检查新行字符,将结果与
0xA

int count = 0;
byte[] buffer = new byte[MAX_BUFFER];

using (FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{              
    // Read bytes form file until the next line break -or- eof 
    // so we don't break a csv row in the middle

    // What should be instead of the 'xxx' ?

    while (((readByte = fs.ReadByte()) != 0xA) && (readByte != -1))
    {
        buffer[count] = Convert.ToByte(readByte);
        count++;
    }
} 
当以十六进制表示的
readByte
等于
10
0xA
时,该条件将为false。 有关更多信息,请查看

更新
您可能还希望定义一个常量,如
const int NEW_LINE=0xA
,并在while语句中使用该常量,而不仅仅是
0xA
。这只是为了帮助您以后弄清楚
0xA
的实际含义。

可能吧!='\n'?是的,谢谢,'\n'工作得很好,有些文件使用
\r\n
0x0D 0x0A
)作为换行符,因此您可能也需要检查
0x0D
。是的,这是正确的。然而,非常有趣的是,Microsoft文档指出,
\r\n
用于非Unix系统,而
\n
用于基于Unix的系统。如果您尝试在Windows上使用
\n
,它将创建新行和回车。是的,没错。但是文件可能来自任何地方(例如,在Windows系统上读取Unix日志文件)。由于这是C#,文件可能包含
0x0D 0x0A
,具体取决于创建文件的位置。因此,我想在阅读文件时,最好对这两种情况都做好准备。