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

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

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

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

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


person Adrian McCarthy    schedule 01.05.2010    source источник


Ответы (1)


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

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

person mdma    schedule 01.05.2010