Портативный способ определить разделитель строки платформы

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

Лучший метод, который я придумал:

  1. Запишите временный файл в текстовом режиме только с '\n' в нем, позволяя времени выполнения сделать перевод.
  2. Считайте назад временный файл в режиме двоичного счета для наблюдения фактических байтов.

Это чувствует себя топорным. Существует ли способ сделать это без временных файлов? Я попробовал stringstreams вместо этого, но время выполнения на самом деле не переводит '\n' в том контексте (который имеет смысл). Время выполнения выставляет эту информацию некоторым другим способом?

11
задан Adrian McCarthy 19 October 2012 в 18:28
поделиться

1 ответ

Я не эксперт по C / C ++, но, похоже, в стандартной библиотеке нет ничего, что напрямую предоставило бы вам разделитель строк. Перевод прозрачно обрабатывается файловыми функциями текстового режима.

Даже если вы чувствуете, что ваш подход «беспорядочный», он, вероятно, самый простой и надежный, поскольку вы действительно проверяете, какой разделитель строк используется и записывается. И является переносимым, поскольку вы используете стандартные библиотечные функции для записи и чтения файла.

7
ответ дан 3 December 2019 в 11:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: