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

В разных платформах используются разные схемы разделителей линий (LF, CR-LF, CR, NEL, Unicode LINE SEPARATOR и т.д.). С++ (и C) библиотеки времени выполнения делают это прозрачным для большинства программ, преобразовывая '\n' в и из родной новой линейной кодировки целевой платформы. Но если ваша программа должна определить фактическую последовательность байтов, как вы могли бы сделать это переносимо?

Лучший способ, который я придумал, - это:

  • Напишите временный файл в текстовом режиме с помощью всего лишь '\n' в нем, позволяя времени выполнения выполнить перевод.
  • Прочитайте временный файл в двоичном режиме, чтобы увидеть фактические байты.

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

Ответ 1

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

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