Различные платформы используют различные схемы разделителя строки (LF, CR-LF, CR, NEL, РАЗДЕЛИТЕЛЬ СТРОКИ Unicode, и т.д.). C++ (и C) библиотеки времени выполнения делает многое из этого очевидным для большинства программ путем преобразования '\n'
к и от собственного кодирования новой строки целевой платформы. Но если Ваша программа должна определить фактическую используемую последовательность байта, как Вы могли сделать это портативно?
Лучший метод, который я придумал:
'\n'
в нем, позволяя времени выполнения сделать перевод.Это чувствует себя топорным. Существует ли способ сделать это без временных файлов? Я попробовал stringstreams вместо этого, но время выполнения на самом деле не переводит '\n'
в том контексте (который имеет смысл). Время выполнения выставляет эту информацию некоторым другим способом?
Я не эксперт по C / C ++, но, похоже, в стандартной библиотеке нет ничего, что напрямую предоставило бы вам разделитель строк. Перевод прозрачно обрабатывается файловыми функциями текстового режима.
Даже если вы чувствуете, что ваш подход «беспорядочный», он, вероятно, самый простой и надежный, поскольку вы действительно проверяете, какой разделитель строк используется и записывается. И является переносимым, поскольку вы используете стандартные библиотечные функции для записи и чтения файла.