Каков лучший способ в C# для определения окончаний строки, используемых в текстовом файле (Unix, Windows, Mac)?
Обратите внимание, что текстовые файлы могут иметь несовместимые окончания строк. Ваша программа не должна этим подавляться. Использование ReadLine
в StreamReader
(и подобных методах) автоматически позаботится о любом возможном завершении строки.
Если вы вручную читаете строки из файла, убедитесь, что принимаете любые окончания строк, даже если они несовместимы. На практике это довольно просто, используя следующий алгоритм:
Я полагаю, что вы не можете знать наверняка, это нужно задать в редакторе. Вы могли бы использовать некоторый AI, алгоритм был бы следующим:
Так, например, если у вас есть повторы CRLF в 38, 40, 45, и это в пределах допустимого, то по умолчанию вы будете считать, что конец строки - это CRLF.
Я бы просто поискал в файле первый \ r
или \ n
, и если бы это был \ n
, я бы посмотрел на предыдущий , чтобы узнать, является ли это \ r
, если да, то это \ r \ n
, в противном случае это то, что найдено.
Читая большинство текстовых форматов, я обычно ищу \ n, а затем Trim () всю строку (пробелы в начале и в конце часто бывают излишними).
Если бы это был я, я бы просто читал файл по одному символу за раз, пока не встретил бы первый \r
или \n
. Это при условии, что у вас сенситивный ввод.
Вот некоторые предварительные догадки: прочтите файл, подсчитайте CR и LF
if (CR > LF*2) then "Mac"
else if (LF > CR*2) then "Unix"
else "Windows"
Также обратите внимание, что более новые Mac (Mac OS X) используют окончания строк Unix
Есть Environment.NewLine
, но это только для определения того, что используется в текущей системе и не поможет при чтении файлов из различных источников.
Если это чтение, я обычно ищу \n
(Edit: apperantly there are some using only \r
) и предполагаю, что строка заканчивается там.