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