Как уже говорили другие в комментариях, вы не можете использовать ReadLine()
и ожидать найти символы EOL в возвращаемой строке.Теперь, если я вас правильно понимаю, с помощью StreamReader
вы можете сделать что-то вроде этого:
using (var sr = new StreamReader(filePath))
{
long position = 0;
char[] buffer;
while (sr.Peek() >= 0)
{
buffer = new char[513];
sr.Read(buffer, 0, buffer.Length);
if (buffer[511] == '\r' && buffer[512] == '\n')
{
position += 513;
Console.WriteLine("CRLF");
}
else if (buffer[511] == '\r' || buffer[511] == '\n')
{
position += 512;
sr.BaseStream.Seek(position, SeekOrigin.Begin);
sr.DiscardBufferedData();
Console.WriteLine("CR or LF");
}
else
{
Console.WriteLine("Something went wrong!");
break;
}
}
}
Это будет читать куски по 513 символов за раз и проверять следующее:
Если последние два символа CRLF
, то мы готовы идти дальше, и мы продолжим чтение следующих 513 символов.
Если приведенный выше тестне проходит, но символ в позиции 511 является либо CR
, либо LF
, он вернет позицию на один символ назад (учитывая, что предыдущая "строка" была 512 символов, а не 513) и продолжить чтение следующих 513 символов.
Если ни один из вышеуказанных тестов не пройден (т. е. символ в позиции 511 не является ни CR
, ни LF
), он выйдетпетля. Вы можете настроить это в соответствии со своими требованиями .
И если вы хотите получить доступ к текущей строке в виде строки, вы можете легко сделать это, используя что-то вроде:
string line = new string(buffer, 0, 511);