С++ изменяет новую строку от CR + LF до LF

Я пишу код, который работает в Windows и выводит текстовый файл, который позже становится входом в программу в Linux. Эта программа ведет себя некорректно, если заданные файлы имеют новые строки, которые являются CR + LF, а не только LF.

Я знаю, что могу использовать такие инструменты, как dos2unix, но я бы хотел пропустить дополнительный шаг. Возможно ли получить программу на С++ в Windows для использования новой строки Linux вместо Windows?

Ответы

Ответ 1

Да, вы должны открыть файл в "двоичном" режиме, чтобы остановить перевод новой строки.

Как вы это делаете, зависит от того, как вы открываете файл.

Использование fopen:

FILE* outfile = fopen( "filename", "wb" );

Использование ofstream:

std::ofstream outfile( "filename", std::ios_base::binary | std::ios_base::out );

Ответ 2

ОК, так что это, вероятно, не то, что вы хотите услышать, но здесь мои $0,02, основанные на моем опыте:

Если вам нужно передавать данные между различными платформами, в конечном итоге вам, вероятно, лучше использовать формат, который не волнует, как выглядят строки. Если это текстовые файлы, пользователи будут иногда возиться с ними. Если, испортив окончание строки, это приведет к сбою вашего приложения, это будет приложение с интенсивной поддержкой.

Был там, сделал это, переключился на XML. Сделал поддержку парням намного счастливее.