如何在逐字节读取CSV文件时检测字节是否为换行符-C#
我需要逐字节读取CSV文件(注意:我不想逐行读取)。 如何检测读取的字节是否为换行符? 如何知道到达了终点线如何在逐字节读取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
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
,具体取决于创建文件的位置。因此,我想在阅读文件时,最好对这两种情况都做好准备。